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