17 靜態鍊錶

2022-07-13 13:39:12 字數 2954 閱讀 4054

1

/*大話資料結構----3.12線性表的靜態儲存結構*/2

3 #include4 #include5 #include67

#define maxsize 1000 //

假設鍊錶的最大長度是1000

8#define ok 1

9#define error 0

10#define true 1

11#define false 0

12 typedef int elemtype;//

根據實際情況而定,這裡假設為int

13 typedef int status;//

函式型別,其值是函式結果**,如ok等

1415

16//

定義結構體

17 typedef struct

component,staticlinklist[maxsize];

2122

/*23

初始化,將一維陣列space中各分量鏈成一備用鍊錶

24space[0].cur為頭指標,"0"表示空指標

25*/

26status initlist(staticlinklist space)

31 space[maxsize - 1].cur = 0;//

目前靜態鍊錶為空,最後乙個元素的cur為0

32return

ok;33}34

//陣列長度

35int

listlength(staticlinklist l)

42return

j;43}44

/*靜態鍊錶的插入

45靜態鍊錶中操作的是陣列,需要自己實現申請和釋放兩個函式,才能做插入和刪除操作

46將所有未被使用過的及已被刪除的分量用游標鏈成乙個備用的鍊錶,每當進行插入時,

47便可以從備用鍊錶上取得第乙個結點作為待插入的新結點

48*/

4950

//若備用鍊錶非空,則返回分配的結點下標,否則返回0

51int

malloc_sll(staticlinklist space)

58return

i;59}60

//插入函式:在l中的第i個元素之前插入新的資料元素e

61 status insert_staticlinklist(staticlinklist l, int

i, elemtype e)

67 j = malloc_sll(l);//

獲得空閒分量的下標

68if

(j)

73 l[j].cur = l[k].cur;//

把第i 個元素之前的cur賦值給新元素的cur

74 l[k].cur = j;//

把新元素的下標賦值給第i個元素之前元素的cur

75return

ok;76}77

return

error;78}

79//

刪除操作:free

80//

將下標為k的空閒結點**到備用鍊錶

81void free_sll(staticlinklist space, int

k) 85

//刪除在l中的第i個元素e

86 status delete_staticlinklist(staticlinklist l, int

i) 91 k = maxsize - 1;92

for (j = 1; j <= i - 1; j++)

95 j =l[k].cur;

96 l[k].cur =l[j].cur;

97free_sll(l, j);

98return

ok;99

}100

101//

獲得元素操作:用e返回l中第i個元素的值

102 status getelem(staticlinklist l, int i, elemtype *e)

106 *e =l[i].data;

107return

ok;108

}109

//列印

110void

print_staticlinklist(staticlinklist l)

118 printf("\n"

);119

}120

121122

intmain()

123;

126//

初始化127

initlist(m);

128129

//插入資料

130for (int i = 0; i < 8;i++)

131 insert_staticlinklist(m, 1

, n[i]);

132133

//列印

134 printf("

鍊錶長度:%d \n

", listlength(m));

135print_staticlinklist(m);

136137

//刪除

138 delete_staticlinklist(m, 3

);139

140//

列印141 printf("

刪除後鍊錶長度:%d \n

", listlength(m));

142print_staticlinklist(m);

143144 printf("\n"

);145 system("

pause");

146return0;

147 }

執行結果:

鍊錶17 鍊錶判環

題目 如何判斷乙個單鏈表是否有環?有環的話返回進入環的第乙個節點的值,無環的話返回 1。如果鍊錶的長度為n,請做到時間複雜度o n 額外空間複雜度o 1 給定乙個單鏈表的頭結點head 注意另乙個引數adjust為加密後的資料調整引數,方便資料設定,與本題求解無關 請返回所求值。詳見lb7,只是返回...

鍊錶學習 靜態鍊錶

struct linknode 鍊錶在指定位置插入與刪除元素不需要移動元素,只需要修改指標即可,而陣列刪除與加入元素則需要移動後面的元素,鍊錶相對於陣列來講,則多了指標域空間開銷,拿到鍊錶第乙個節點就相當於拿到整個鍊錶 鍊錶的分類 靜態鍊錶,動態鍊錶 單向鍊錶,雙向鍊錶,迴圈鍊錶,單向迴圈鍊錶,雙向...

靜態鍊錶(陣列 鍊錶和靜態鍊錶的操作)

因為是線性表,不能只講鍊錶,所以今天提一下靜態鍊錶以及陣列 鍊錶 靜態鍊錶之間的對比。陣列基本結構沒得說,插入和刪除的操作也是有的 雖然看著不比較詭異 一般是動態分配乙個足夠長的,記錄有多少個元素後對這個個數進行加減,而不是每插入乙個就動態分配 其實這樣也行,要是不怕麻煩的話 另外在插入刪除操作之後...