静态链表和动态链表 区别
使用C語言描述靜態(tài)鏈表和動(dòng)態(tài)鏈表
靜態(tài)鏈表和動(dòng)態(tài)鏈表是線性表鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的兩種不同的表示方式。
靜態(tài)鏈表的初始長度一般是固定的,在做插入和刪除操作時(shí)不需要移動(dòng)元素,僅需修改指針,故仍具有鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的主要優(yōu)點(diǎn)。
動(dòng)態(tài)鏈表是相對(duì)于靜態(tài)鏈表而言的,一般地,在描述線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)時(shí)如果沒有特別說明即默認(rèn)描述的是動(dòng)態(tài)鏈表。
下面給出它們的簡單實(shí)現(xiàn),關(guān)于線性表更為詳盡的C語言的實(shí)現(xiàn),可以參考?http://www.cnblogs.com/choon/p/3876606.html
靜態(tài)鏈表
| 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> /*所有結(jié)點(diǎn)都是在程序中定義的,不是臨時(shí)開辟的,也不能用完后釋放,這種鏈表稱為“靜態(tài)鏈表”。*/ struct?Student { ????int?num; ????float?score; ????struct?Student *next; }; int?main() { ????struct?Student stu1, stu2, stu3, *head, *p; ????stu1.num = 1001; stu1.score = 80;?//對(duì)結(jié)點(diǎn)stu1的num和score成員賦值 ????stu2.num = 1002; stu2.score = 85;?//對(duì)結(jié)點(diǎn)stu2的num和score成員賦值 ????stu3.num = 1003; stu3.score = 90;?//對(duì)結(jié)點(diǎn)stu3的num和score成員賦值 ????head = &stu1;??????//頭指針指向第1個(gè)結(jié)點(diǎn)stu1 ????stu1.next = &stu2;?//將結(jié)點(diǎn)stu2的地址賦值給stu1結(jié)點(diǎn)的next成員 ????stu2.next = &stu3;?//將結(jié)點(diǎn)stu3的地址賦值給stu2結(jié)點(diǎn)的next成員 ????stu3.next = NULL;??//stu3是最后一個(gè)結(jié)點(diǎn),其next成員不存放任何結(jié)點(diǎn)的地址,置為NULL ????p = head;??????????//使p指針也指向第1個(gè)結(jié)點(diǎn) ????//遍歷靜態(tài)鏈表 ????do{ ????????printf("%d,%f\n", p->num, p->score);?//輸出p所指向結(jié)點(diǎn)的數(shù)據(jù) ????????p = p->next;?????????????????????????//然后讓p指向下一個(gè)結(jié)點(diǎn) ????}?while?(p != NULL);?????????????????????//直到p的next成員為NULL,即完成遍歷 ????system("pause"); } |
動(dòng)態(tài)鏈表
| 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> /*所謂動(dòng)態(tài)鏈表,是指在程序執(zhí)行過程中從無到有地建立起一個(gè)鏈表,即一個(gè)一個(gè)地開辟結(jié)點(diǎn)和輸入各結(jié)點(diǎn)數(shù)據(jù),并建立起前后相鏈的關(guān)系。*/ struct?Student { ????int?No;//學(xué)號(hào) ????struct?Student *next; }; int?main() { ????struct?Student *p1, *p2, *head; ????int?n = 0;?//結(jié)點(diǎn)個(gè)數(shù) ????head = NULL; ????p1 = (struct?Student *)malloc(sizeof(struct?Student)); ????printf("請(qǐng)輸入1個(gè)學(xué)號(hào)\n"); ????scanf("%d", &p1->No); ????p2 = p1;?//開始時(shí),p1和p2均指向第1個(gè)結(jié)點(diǎn) ????while?(p1->No != 0) ????{ ????????n++; ????????if?(n == 1) ????????{ ????????????head = p1; ????????} ????????else ????????{ ????????????p2->next = p1; ????????} ????????p2 = p1;//p2是最后一個(gè)結(jié)點(diǎn) ????????printf("請(qǐng)輸入學(xué)號(hào),輸入0終止:\n"); ????????p1 = (struct?Student *)malloc(sizeof(struct?Student)); ????????scanf("%d", &p1->No); ????}; ????p2->next = NULL;//輸入完畢后,p2->next為NULL ????//遍歷動(dòng)態(tài)鏈表 ????struct?Student *p; ????p = head; ????while?(p != NULL) ????{ ????????printf("%d,", p->No); ????????p = p -> next; ????} ????printf("\n"); ????system("pause"); } |
總結(jié)
以上是生活随笔為你收集整理的静态链表和动态链表 区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 股票成交额怎么看 怎么看股票成交额
- 下一篇: 农商银行双休日上班吗