1 //單鏈表:通過各結點的鏈結指標來表示結點間的邏輯關係,長度可擴充,遍歷或查詢
2 //只能從指標的指示的首元結點開始,跟隨鏈結指標逐個結點進行訪問,進行刪除或插
4 5
6 //單鏈表的結構定義
7 typedef int datatype;
8 typedef struct node
9 linknode, *linklist;//鏈結指標域
13 //頭指標,包含0個或多個結點,空表為0個結點
14 //單鏈表中的插入與刪除
15 //單鏈表插入演算法
16 int insert(linklist& first, int i, datatype x)
17 27 newnode->data = x;
28 newnode->link = first;//新結點成為第乙個結點
29 first = newnode;
30 }
31 else//插入到鏈中間或尾部
32
40 if(p == null && first)//非空表且鏈太短
41
57 }
58 return 1;//正常插入
59 }
60
61 //單鏈表刪除演算法
62 int remove(linklist& first, int i, datatype& x)
63 72 else
73
81 if(p == null || p->link == null)//空表或者鏈太短只有頭結點
82
86 q = p->link;//儲存第i號結點的位址
87 p->link = q->link;//第i-1號結點與第i+1號結點鏈結
88 }
89 x = q->data;//取出被刪除結點中的資料值
90 delete q;//並刪除
91 return 1;
92 }
97帶頭結點,頭結點data域不儲存任何資訊, 空表為頭結點
//帶頭結點的單鏈表
98 //頭結點的data域不儲存任何資訊。把頭結點當第0個結點,帶頭結點的單鏈表
99 //簡化了鍊錶的插入與刪除操作**的實現
100
101 //初始化單鏈表
102 void initlist(linklist &first)
103
110 first->link = null;//置空
111 }
112
113 //清空單鏈表
114 void clearlist(linklist &first)
115
123 }
124
125 //計算表的長度
126 int length(linklist &first)
127
135 return count;
136 }
137
138 //判斷單鏈表是否為空。如果表空,則函式返回1,否則函式返回0
139 int isempty(linklist &first)
140
143
144 //在單鏈表中查詢與x匹配的元素,查詢成功時函式返回該結點位址,否則返回null值
145 linknode* search(linklist& first, datatype x)
146
152
153 //在單鏈表中對第i(0<=i)個結點定位。函式返回表中第i個結點的位址
154 //若i<0或i超出表中結點個數,則返回null
155 linknode* locate(linklist& first, int i)
156
166 return p;//返回null,表示i值太大,返回結點位址
167 }
168
169 //將新元素x插入在表中第i(1<=i)個結點位置。如i不合理則函式返回0,否則函式返回1
170 int insert(linklist& first, int i, datatype x)
171
181 s->data = x;
182 s->link = p->link;//將*s鏈結在*p之後
183 p->link = s;//插入成功
184 return 1;
185 }
186
187 //將鍊錶中的第i個元素刪去,通過引用型引數x返回該元素的值
188 //如果i不合理則函式返回0,否則返回1
189 int remove(linklist& first, int i, datatype& x)
190
200
201 //函式假定鍊錶first1已存在且為空,即first1的頭結點已建立且
202 //first1->link == null
203 //複製鍊錶first2的全部結點到空鍊錶first1
204 void copy(linklist& first1, linklist& first2)
205
216 destptr = destptr->link;
217 destptr->data = srcptr->data;//結點資料傳送
218 srcptr = srcptr->link;//傳送源鏈下一結點資料
219 }
220 destptr->link = null;//目標鏈收尾
221 }
222
223
224 //例項,乙個非空鍊錶first,在first中正向輸出所有結點的值,其遞迴演算法為:
225 //正向輸出鍊錶各結點值的遞迴演算法
226 void write(linknode *first)
227
233 //正向輸出非遞迴演算法
234 void write(linknode *first)//非遞迴(迭代)演算法
235
241 }
245 //尾插法建立單鏈表
246 void insertrear(linklist& first, linknode* & last, datatype endtag)
247
262 last->data = val;//last結點賦值
263 insertrear(first, last->link, endtag);//遞迴建立後續鍊錶
264 }
265 }
266 void main(void)
267
271 cin>>l->data;
272 linknode *rear = l;
273 insertrear(l, rear->link, l->data);
274 }
275
276
277
278 //前插法建立乙個單鏈表
279 void insertfront(linklist& first, datatype endtag)
280
288 s->data = val;//s結點賦值
289 s->link = first->link;//作為首元結點
290 first->link = s;//鏈入頭結點之後
291 insertfront(first, endtag);//遞迴建立鍊錶
292 }
293 void main(void)
294
298 cin>>l->data;//輸入約定的輸入序列結束標誌
299 l->link = null;//鍊錶置空
300 insertfront(l, l->data);//遞迴建立單鏈表
301 }
資料結構 單鏈表(帶頭結點)
單鏈表是一種鏈式訪問的資料結構,用一組位址任意的儲存單元存放線性表中的資料元素。鍊錶中的資料是以結點來表示的,每個結點的構成 元素 資料元素的映象 指標 指示後繼元素儲存位置 元素就是儲存資料的儲存單元,指標就是連線每個結點的位址資料。簡單講就是邏輯相鄰,物理不相鄰 帶頭結點 list.h prag...
資料結構篇 單鏈表倒置(帶頭結點 不帶頭結點)
初始化如圖 1.我們需要把1這個結點作為最後乙個結點,所以要把1的next指向null 2.然後我們要新建結點,指向headnext的下一位,並把headnext的下一位指向headpre,3.headpre指向headnext為下一次迴圈做準備 headpre headnext 4.如果tempn...
單鏈表(帶頭結點)
按照自己的想法和思路寫了一下帶頭結點的單鏈表,並進行了測試,畢竟自己能力有限,可能有的地方沒有測試到,還可能存在一些潛在的錯誤。標頭檔案 include using namespace std typedef struct node node,link typedef struct list lis...