12 順序表的順序儲存結構

2022-07-13 13:45:12 字數 4390 閱讀 1607

動態陣列實現

動態陣列標頭檔案:dynamicarray.h

1

#ifndef dynamic_array_h

2#define dynamic_array_h

34 #include5 #include6 #include7//

動態增長記憶體,策略:將存放資料的記憶體放到?堆上8//

動態陣列 如果5個元素 申請記憶體 拷貝資料 釋放記憶體 插入第七個?太麻煩了!!!!9//

用capacity儲存容量 用size記錄當前陣列中具體的元素個數

1011 typedef struct

dynamicarray dynamic_array;

1617

//寫一系列的相關對dynamicarray結構體操作的函式

18//

初始化19 dynamic_array*init_dynamic_array();

20//

插入21

void pushback_array(dynamic_array* arr,int

value);

22//

根據位置刪除

23void removebypos_array(dynamic_array* arr, int

pos);

24//

根據值刪除

25void removebyvalue_array(dynamic_array* arr, int

value);

26//

查詢27

int find_array(dynamic_array* arr,int

value);

28//

列印29

void print_array(dynamic_array*arr);

30//

釋放動態陣列的記憶體

31void freespace_array(dynamic_array*arr);

3233

//清空陣列

34void clear_array(dynamic_array*arr);

35//

獲取動態陣列容量

36int capacity_array(dynamic_array*arr);

37//

獲取動態資料當前元素個數

38int size_array(dynamic_array*arr);

39//

根據位置獲得某個位置元素

40int at_array(dynamic_array* arr, int

pos);

41#endif

dynamicarray.c

1 #include"

dynamicarray.h"2

3//初始化4 dynamic_array*init_dynamic_array()

16//

插入17

void pushback_array(dynamic_array* arr, int

value)

21//

判斷空間是否足夠

22if (arr->size == arr->capacity)

34//

插入新元素

35 arr->paddr[arr->size] =value;

36 arr->size++;

3738}39

//根據位置刪除

40void removebypos_array(dynamic_array* arr, int

pos)

44//

判斷位置是否有效

45if (pos < 0 || pos >= arr->size)

48//

刪除元素 如果刪除不是最後位置,將刪除位置後繼元素前移

49for (int i = pos; i < arr->size-1; i++)

50 arr->paddr[i] = arr->paddr[i+1

];51 arr->size--;

5253}54

//根據值刪除value第一次出現的位置

55void removebyvalue_array(dynamic_array* arr, int

value)

5660

//找值的位置

61int pos =find_array(arr,value);

62//

int pos = -1;

63//

for (int i = 0; i < arr->size; i++)

68//}69

70//

根據位置刪除

71removebypos_array(arr, pos);

7273}74

//查詢value的位置

75int find_array(dynamic_array* arr, int

value)

79//

找值的位置

80int pos = -1;81

for (int i = 0; i < arr->size; i++) 86}

87return

pos;88}

8990

91//

列印92

void print_array(dynamic_array*arr)

96for (int i = 0; i < arr->size; i++)

97100 printf("\n"

);101

102}

103//

釋放動態陣列的記憶體

104void freespace_array(dynamic_array*arr) //

讓程式更健壯

108109

if (arr->paddr !=null)

112113

free

(arr);

114}

115//

清空陣列

116void clear_array(dynamic_array*arr)

120//

paddr->空間

121 arr->size = 0

;122

123}

124125

//獲取動態陣列容量

126int capacity_array(dynamic_array*arr)

130131

132return arr->capacity;

133 }//

獲取動態資料當前元素個數

134int size_array(dynamic_array*arr)

139return arr->size;

140}

141//

根據位置獲得某個位置元素

142int at_array(dynamic_array* arr, int

pos)

main.c

1

#define _crt_secure_no_warnings

2 #include3 #include4 #include

5 #include"

dynamicarray.h"6

7void

test01()

18 printf("

陣列容量:%d\n

", capacity_array(myarray));

19 printf("

陣列大小:%d\n

", size_array(myarray));

20//

列印21

print_array(myarray);

2223

//刪除

24 removebypos_array(myarray,0

);25 removebyvalue_array(myarray,27

);26

//列印

27print_array(myarray);

2829

//查詢

30int pos = find_array(myarray, 5

);31 printf("

5查詢到:pos:%d %d\n

", pos, at_array(myarray, pos));

3233

//銷毀

34freespace_array(myarray);35}

3637

38int

main()

39

vs2015執行結果:

線性表的順序儲存結構 順序表

線性表的順序儲存結構 順序表一.在c c 語言中,借助陣列型別來實現順序表,也就是說,用陣列存放線性表的元素及其邏輯關係,陣列的基本型別就是線性表中元素的的型別,陣列大小 即陣列上界 下界 1 要大於等於線性表的長度,否則該陣列不能存放對應線性表的所有元素。所以當線性表長度小於陣列大小時,該陣列中會...

線性表的順序儲存結構 順序表

什麼是線性表?線性表簡稱表,是n n 0 個具有相同型別的資料元素的有限序列,線性表中資料元素的個數稱為線性表的長度,長度為0的表稱為空表。什麼是順序表?線性表的順序儲存結構稱為順序表。順序表是用一段位址連續的儲存單元依次儲存線性表的資料元素,因為線性表中每個元素的型別相同,通常用一維陣列來實現線性...

順序表(線性表的順序儲存結構)

邏輯結構上呈線性分布的資料元素在實際的物理儲存結構中也同樣相互之間緊挨著,這種儲存結構稱為線性表的順序儲存結構。也就是說,邏輯上具有線性關係的資料按照前後的次序全部儲存在一整塊連續的記憶體空間中,之間不存在空隙,這樣的儲存結構稱為順序儲存結構。使用順序儲存結構儲存的資料,第乙個元素所在的位址就是這塊...