日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单链表操作实现getelem_c语言实现--带头结点单链表操作

發布時間:2025/3/11 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单链表操作实现getelem_c语言实现--带头结点单链表操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

可能是順序表研究的細致了一點,單鏈表操作一下子就實現了。這里先實現帶頭結點的單鏈表操作。

大概有以下知識點.

1;結點:結點就是單鏈表中研究的數據元素,結點中存儲數據的部分稱為數據域,存儲直接后繼地址的部分稱為指針域。

2;結點示意圖:

3;頭指針:頭指針始終指向鏈表第一個元素,當有頭結點時頭結點就是鏈表第一個元素。頭指針具有標識左右,故頭指針命名為鏈表的名字,這里為linklist。頭指針是一定存在的。

4;頭結點:引入頭結點的目的是,將鏈表首元結點的插入和刪除操作與其他結點的插入和刪除操作統一起來。(即頭指針地址不在發生變化)

5;單鏈表結點結構體表示:

1 structLNode2 {3 int data; //姑且認為其數據為整型

4 struct LNode *next;5 };6

7 typedef struct LNode * linklist

6;單鏈表的操作集合,頭文件 defs.h

1 #ifndef _DEFS_H_2 #define _DEFS_H_

3

4 #include

5 #include

6 #include

7

8 struct LNode //單鏈表結點的定義

9 {10 intdata;11 struct LNode *next;12 }13 typedef struct LNode *linklist14

15 //操作集合

16 void InitList(linklist *L); //申請頭結點,頭指針地址改變

17 void DestroyList(linklist *L); //須釋放頭結點,頭指針地址改變

18 void ClearList(linklist L); //保留頭結點,頭指針地址不變

19 voidListEmpty(linklist L);20 intListLength(linklist L);21 int GetElem(linklist L, int i, int *e);22 int LocateElem(linklist L, inte);23 int PriorElem(linklist L, int cur_e, int *pri_e);24 int NextElem(linklist L, int cur_e, int *nex_e);25 int ListInsert(linklist L, int i, int e); //插入不改變頭指針的值

26 int ListDelete(linklist L, int i, int *e); //刪除操作也不改變頭指針的值

27 voidTravelList(linklist L);28 #endif

7;InitList操作實現

1 #include"defs.h"

2

3 void InitList(linklist *L) //接受頭指針的地址值

4 {5 *L = (linklist)malloc(sizeof(struct LNode)); //*L表示頭指針

6

7 if (*L ==NULL)8 {9 printf("分配結點失敗。\n");10 exit(-1);11 }12 (*L)->next = NULL; //置頭結點的next域為空

13 }

InitList.c

8;DestroyList操作的實現

1 #include"defs.h"

2

3 void DestroyList(linklist *L) //接受的參數為頭指針的地址值

4 {5 linklist p ;6 while (*L)7 {8 p = (*L)->next; //釋放結點之前先保存結點的下一個地址,防止線索被斷

9 free(*L);10 *L = p; //將下一個結點,作為釋放結點

11 }12 }

DestroyList.c

9;ClearList操作的實現

1 #include"defs.h"

2

3 void ClearList(linklist L) //保留頭結點

4 {5 linklist p = L->next; //p將頭指針的next值保存起來,p指向首元結點

6 L->next =NULL;7

8 DestroyList(&p); //調用撤銷函數,釋放后面的結點

9

10 }

ClearList.c

10;ListEmpty操作的實現

1 #include"defs.h"

2

3 voidListEmpty(linklist L)4 {5 if (L->next == NULL) //判斷頭結點指針域是否為空

6 printf("鏈表為空.\n");7 else

8 printf("鏈表不為空.\n");9 }

ListEmpty.c

11;ListLength操作實現

1 #include"defs.h"

2

3 intListLength(linklist L)4 {5 int j=0; //作為計數器

6 linklist p = L->next; //p指向首元結點,作為移動指針

7

8 while (p) //從首元結點開始

9 {10 ++j;11 p = p->next;12 }13 returnj;14 }

ListLength.c

12;GetElem操作實現

1 #include"defs.h"

2

3 int GetElem(linklist L, int i, int *e) //1<= i <=ListLength(L)

4 {5 int j = 0; //j作為計數器

6 linklist p =L;7

8 while (p && j

9 {10 ++j;11 p = p->next;12 }13 if (!p || i<1) //取值位置不合理

14 exit(0);15

16 *e = p->data;17 return 0;18 }

GetElem.c

13;LocateElem操作實現

1 #include"defs.h"

2

3 int LocateElem(linklist L, inte)4 {5 linklist p = L->next; //p作為移動指針,p指向第一個元素

6 int j = 0; //j作為計數器

7

8 while(p)9 {10 ++j;11 if (p->data ==e)12 returnj;13 p = p->next;14 }15 return 0;16 }

LocateElem.c

14;PriorElem操作實現

1 #include"defs.h"

2

3 int PriorElem(linklist L, int cur_e, int *pri_e) //第一個元素無前驅

4 {5 linklist p = L->next; //p指向首元結點

6 linklist q;7

8 while(p)9 {10 q = p->next; //q為p的后繼

11

12 if (q && q->data == cur_e) //則p就是q的前驅

13 *pri_e = p->data;14 p = q; //循環

15 }16 return 0;17 }

PriorElem.c

15;NextElem操作的實現

1 #include"defs.h"

2

3 int NextElem(linklist L, int cur_e, int *nex_e) //最后一個元素無后繼

4 {5 linklist p = L->next; //p指向首元結點

6 linklist q;7

8 while(p)9 {10 q = p->next; //q為p的后繼

11

12 if (q && p->data == cur_e) //p有后繼,且p的數據域與當前值相等

13 *nex_e = q->data;14 p = q; //更新p

15 }16 return 0;17 }

NextElem.c

16;ListInsert操作的實現

1 #include"defs.h"

2

3 int ListInsert(linklist L, int i, int e) //1<= i <= ListLength(L)

4 {5 int j=0; //j為基數器

6 linklist p = L; //p為移動指針,p指向頭結點

7 linklist q, s;8

9 while (p && j

10 {11 ++j;12 p = p->next;13 }14

15 if (!p || i<1) //插入位置不合理

16 return 0;17

18 q = p->next; //q指向第i個結點

19

20 s = (linklist)malloc(sizeof(structLNode));21 if (!s) //分配失敗

22 exit(-1);23

24 s->data = e; //置s的數據域為e

25 s->next = q; //插入操作,是指針連起來

26 p->next =s;27 return 0;28 }

ListInsert.c

17;ListDelete操作的實現

1 #include"defs.h"

2

3 int ListDelete(linklist L, int i, int *e) //1<= i <=ListLength(L)

4 {5 int j = 0; //j為計數器

6 linklist p =L;7 linklist q;8

9 while (p && j

10 {11 ++j;12 p = p->next;13 }14

15 if (!p || i<1) //刪除位置不合理

16 exit(0);17 q = p->next; //q指向第i個結點

18

19 *e = q->data; //先將第i個結點的數據域帶出

20 p->next = q->next; //連起指針

21 free(q); //釋放第i個結點

22

23 return 0;24 }

ListDelete.c

18;TravelList操作實現

1 #include"defs.h"

2

3 voidTravelList(linklist L)4 {5 linklist p = L->next; //p指向首元結點

6 int j = 0; //j為計數器

7

8 while(p)9 {10 ++j;11 printf("第%d個結點的數據域的值為:%d\n", j, p->data);12 p = p->next; //更新p

13 }14 }

TravelList.c

19;makefile的實現,其代碼與順序表的一樣,這里換成另一種寫法

1 object =main.o InitList.o DestroyList.o ClearList.o ListEmpty.o \2 ListLength.o GetElem.o LocateElem.o PriorElem.o NextElem.o \3 ListInsert.o ListDelete.o TravelList.o4

5 test : $(object)6 gcc -g -Wall -o test $(object)7

8 $(object) : defs.h9

10 .PHONY : clean11 clean :12 rm -f *.o

20;順序表與單鏈表的比較

順序表是用一段地址連續的存儲單元來存放數據元素,適合查找,不適合頻繁插入和刪除(沒一次操作都是O(n));

單鏈表是用不連續的存儲單元,其數據元素之間是用指針來連接,每一次的查找都必須通過頭指針來遍歷,因此其不適合頻繁的查找。但是對于插入和刪除操作,它不需要移動其它元素,算法時間復雜度為O(1),因此特別適合頻繁的插入和刪除操作。

總結

以上是生活随笔為你收集整理的单链表操作实现getelem_c语言实现--带头结点单链表操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲性欧美色 | 午夜一区二区三区 | 一级黄色免费观看 | 久久国产激情视频 | 天堂网av手机版 | 丰满人妻在公车被猛烈进入电影 | 日本大尺度吃奶做爰视频 | 色噜噜狠狠一区二区 | 亚洲视频一二三四 | www.啪| 久久亚洲成人 | 波多野结衣50连登视频 | 久久亚洲精精品中文字幕早川悠里 | 国产伦精品一区二区三区照片91 | 国产一区二区视频在线 | 男女涩涩 | 性生交大片免费看狂欲 | 在线免费黄色av | 欧美日韩亚洲一区二区 | 丰满少妇理论片 | 亚洲国产日韩a在线播放性色 | www.色综合.com | 国产一级做a爱免费视频 | 狠狠天天| 国产喷水视频 | 欧美激情区 | 国产传媒在线观看 | 亚洲论理| 国产一级大片在线观看 | 日本www网站 | 99精品视频免费 | 一级特黄av | 日韩视频免费在线观看 | 国产一区二区免费在线观看 | 毛片福利视频 | 国产精品第一 | 亚洲视频天堂 | 亚洲一级网站 | 青青视频在线播放 | 亚洲一二三区在线观看 | 日韩激情中文字幕 | 成人香蕉视频在线观看 | 999精品在线视频 | 欧美日韩国产伦理 | 国产一级免费av | 欧美久操| 国产一区二区三区免费在线观看 | 日本美女啪啪 | 日韩国产精品一区 | 男生尿隔着内裤呲出来视频 | 欧洲av网站 | 午夜xx| 国产精品 欧美激情 | 男女啪啪在线观看 | 黄色天堂网站 | 在线观看黄色动漫 | 国产免费成人av | 国产高清免费 | 成人拍拍| 欧美亚洲精品一区二区 | 免费欧美黄色片 | 天堂在线免费视频 | 在线精品一区二区 | 欧洲一区二区在线 | 日本a∨视频 | 色国产精品 | 四虎网址大全 | 男人操女人免费视频 | 欧美va天堂| 大学生高潮无套内谢视频 | 久久久久久久久久影院 | 欧美日韩成人在线视频 | 一本色道久久综合亚洲二区三区 | 亚洲蜜臀av| 日韩一区二区三区视频在线观看 | 国产精品va无码一区二区 | 亚洲图片在线 | 天天透天天干 | 草莓巧克力香氛动漫的观看方法 | 少妇呻吟视频 | 日本久久黄色 | 碰碰色 | 国家队动漫免费观看在线观看晨光 | 玖色视频 | 精品国产亚洲一区二区麻豆 | 色噜噜在线观看 | 91免费福利 | 国产喷水在线 | 17草在线 | 亚洲精品码 | 999午夜| 亚洲午夜久久久久久久久 | 日韩一区高清 | 亚洲青色在线 | 免费看的黄色录像 | 日韩欧美一区在线 | 国产精品乱码妇女bbbb | 男人天堂新地址 | 欧美一级鲁丝片 |