資料結構 單鏈表 帶頭結點和不帶頭結點

2021-08-07 22:59:55 字數 4297 閱讀 4647

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...