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 鍊錶在指定位置插入與刪除元素不需要移動元素,只需要修改指標即可,而陣列刪除與加入元素則需要移動後面的元素,鍊錶相對於陣列來講,則多了指標域空間開銷,拿到鍊錶第乙個節點就相當於拿到整個鍊錶 鍊錶的分類 靜態鍊錶,動態鍊錶 單向鍊錶,雙向鍊錶,迴圈鍊錶,單向迴圈鍊錶,雙向...
靜態鍊錶(陣列 鍊錶和靜態鍊錶的操作)
因為是線性表,不能只講鍊錶,所以今天提一下靜態鍊錶以及陣列 鍊錶 靜態鍊錶之間的對比。陣列基本結構沒得說,插入和刪除的操作也是有的 雖然看著不比較詭異 一般是動態分配乙個足夠長的,記錄有多少個元素後對這個個數進行加減,而不是每插入乙個就動態分配 其實這樣也行,要是不怕麻煩的話 另外在插入刪除操作之後...