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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

静态链表和动态链表 区别

發布時間:2023/12/31 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 静态链表和动态链表 区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用C語言描述靜態鏈表和動態鏈表

靜態鏈表和動態鏈表是線性表鏈式存儲結構的兩種不同的表示方式。

靜態鏈表的初始長度一般是固定的,在做插入和刪除操作時不需要移動元素,僅需修改指針,故仍具有鏈式存儲結構的主要優點。

動態鏈表是相對于靜態鏈表而言的,一般地,在描述線性表的鏈式存儲結構時如果沒有特別說明即默認描述的是動態鏈表。

下面給出它們的簡單實現,關于線性表更為詳盡的C語言的實現,可以參考?http://www.cnblogs.com/choon/p/3876606.html

靜態鏈表

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

#define _CRT_SECURE_NO_DEPRECATE

#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1

#include <stdio.h>

#include <stdlib.h>

/*所有結點都是在程序中定義的,不是臨時開辟的,也不能用完后釋放,這種鏈表稱為“靜態鏈表”。*/

struct?Student

{

????int?num;

????float?score;

????struct?Student *next;

};

int?main()

{

????struct?Student stu1, stu2, stu3, *head, *p;

????stu1.num = 1001; stu1.score = 80;?//對結點stu1的num和score成員賦值

????stu2.num = 1002; stu2.score = 85;?//對結點stu2的num和score成員賦值

????stu3.num = 1003; stu3.score = 90;?//對結點stu3的num和score成員賦值

????head = &stu1;??????//頭指針指向第1個結點stu1

????stu1.next = &stu2;?//將結點stu2的地址賦值給stu1結點的next成員

????stu2.next = &stu3;?//將結點stu3的地址賦值給stu2結點的next成員

????stu3.next = NULL;??//stu3是最后一個結點,其next成員不存放任何結點的地址,置為NULL

????p = head;??????????//使p指針也指向第1個結點

????//遍歷靜態鏈表

????do{

????????printf("%d,%f\n", p->num, p->score);?//輸出p所指向結點的數據

????????p = p->next;?????????????????????????//然后讓p指向下一個結點

????}?while?(p != NULL);?????????????????????//直到p的next成員為NULL,即完成遍歷

????system("pause");

}

動態鏈表

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

#define _CRT_SECURE_NO_DEPRECATE

#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1

#include <stdio.h>

#include <stdlib.h>

/*所謂動態鏈表,是指在程序執行過程中從無到有地建立起一個鏈表,即一個一個地開辟結點和輸入各結點數據,并建立起前后相鏈的關系。*/

struct?Student

{

????int?No;//學號

????struct?Student *next;

};

int?main()

{

????struct?Student *p1, *p2, *head;

????int?n = 0;?//結點個數

????head = NULL;

????p1 = (struct?Student *)malloc(sizeof(struct?Student));

????printf("請輸入1個學號\n");

????scanf("%d", &p1->No);

????p2 = p1;?//開始時,p1和p2均指向第1個結點

????while?(p1->No != 0)

????{

????????n++;

????????if?(n == 1)

????????{

????????????head = p1;

????????}

????????else

????????{

????????????p2->next = p1;

????????}

????????p2 = p1;//p2是最后一個結點

????????printf("請輸入學號,輸入0終止:\n");

????????p1 = (struct?Student *)malloc(sizeof(struct?Student));

????????scanf("%d", &p1->No);

????};

????p2->next = NULL;//輸入完畢后,p2->next為NULL

????//遍歷動態鏈表

????struct?Student *p;

????p = head;

????while?(p != NULL)

????{

????????printf("%d,", p->No);

????????p = p -> next;

????}

????printf("\n");

????system("pause");

}

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的静态链表和动态链表 区别的全部內容,希望文章能夠幫你解決所遇到的問題。

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