實現動態順序表

2021-08-28 22:12:40 字數 3651 閱讀 8301

靜態順序表和動態順序表之間的區別就是靜態順序表的儲存大小一旦設定好之後便不能修改;顯然動態順序表採用的是動態分配記憶體,容量是可以增加的,當然動態順序表要比靜態順序表多增加乙個監測容量的引數,每當當前容量存滿的時候就要觸發擴容機制,實現動態開闢記憶體。由於兩者差別不是很大,這裡我就只實現動態順序表,靜態的基本一樣,只是少了擴容機制。(這裡我設定的初始容量為3,便於我們觀察擴容機制)

#include 

#include

#include

#include

#define init_capacity(3

)//實現動態順序表

typedef int datatype;

typedef struct seqlist

seqlist;

void

seqprint

(seqlist* pseq)

;//列印

void

seqinit

(seqlist* pseq)

;//初始化

void

seqdestory

(seqlist* pseq)

;//銷毀

void

seqpushback

(seqlist* pseq, datatype x)

;//尾插

void

seqpopback

(seqlist* pseq)

;//尾刪

void

seqpushfront

(seqlist* pseq, datatype x)

;//頭插

void

seqpopfront

(seqlist* pseq)

;//頭刪

void

seqinsert

(seqlist* pseq, size_t pos, datatype x)

;//插入

void

seqerase

(seqlist* pseq, size_t pos)

;//刪除

int seqfind

(seqlist* pseq, datatype x)

;//查詢

void

seqat

(seqlist* pseq, size_t pos, datatype x)

;//修改

void

bubblesort

(seqlist* pseq)

;//氣泡排序

void

selectsort

(seqlist* pseq)

;//選擇排序

int binary_search

(seqlist* pseq, datatype x)

;//二分查詢

void

seqprint

(seqlist* pseq)

for(int i=

0; i>_size; i++

)printf

("\n");

}void

seqinit

(seqlist* pseq)

void

seqdestory

(seqlist* pseq)

void

expendifrequired

(seqlist* pseq)

pseq-

>_capacity = pseq-

>_capacity*2;

datatype* newarray =

(datatype *

)malloc

(sizeof

(datatype)

*pseq-

>_capacity)

;for

(int i=

0; i>_size; i++

)free

(pseq-

>_a)

; pseq-

>_a = newarray;

}void

seqpushback

(seqlist* pseq, datatype x)

void

seqpopback

(seqlist* pseq)

pseq-

>_size--;}

void

seqpushfront

(seqlist* pseq, datatype x)

pseq-

>_a[0]

= x;

pseq-

>_size++;}

void

seqpopfront

(seqlist* pseq)

pseq-

>_size--;}

void

seqinsert

(seqlist* pseq, size_t pos, datatype x)

else

if(pos == pseq-

>_size)

else

pseq-

>_a[pos]

= x;

pseq-

>_size++;}

}void

seqerase

(seqlist* pseq, size_t pos)

else

if(pos == pseq-

>_size)

else

pseq-

>_size--;}

}int seqfind

(seqlist* pseq, datatype x)

for(int i=

0; i>_size; i++)}

return-1

;}void

seqat

(seqlist* pseq, size_t pos, datatype x)

//修改

pseq-

>_a[pos]

= x;

}void

swap

(int *n1, int * n2)

//公升序

void

bubblesort

(seqlist* pseq)}}

}void

selectsort

(seqlist* pseq)

else

if(pseq-

>_a[i]

< pseq-

>_a[min])}

swap

(pseq-

>_a+min, pseq-

>_a+left);if

(max == left)

swap

(pseq-

>_a+max, pseq-

>_a+right)

;

left++

; right--

;seqprint

(pseq);}

}int binary_search

(seqlist* pseq, datatype x)

else

if(x > pseq-

>_a[mid]

)else

}return-1

;}

動態實現順序表

順序表是在計算機記憶體中以 陣列的形式儲存的線性表,是指用一組位址連續的 儲存單元 依次儲存 資料元素 的線性結構。線性表採用順序儲存的方式儲存就稱之為順序表。順序表是將表中的結點依次存放在計算機記憶體中一組位址連續的 儲存單元中。下面來進行順序表的動態實現 標頭檔案 ifndef seqlist ...

實現動態順序表

標頭檔案seqlist.h中 pragma once include include typedef int datatype typedef struct seqlist seqlist 列印順序表 void printseqlist seqlist pseq printf n 增大容量 void...

動態順序表實現

動態順序表相比於靜態順序表加入了擴容機制,在進行所有插入操作是都必須判斷是否需要擴容 結構體 typedef int datatype define init capacity 3 typedef struct seqlistd seqlistd 順序表的初始化和銷毀 初始化 void seqlis...