鏈表是線性表的一種,是一種基礎的數據結構,也是很多人學習的第一種數據結構,鏈表的種類不少,單向鏈表,雙向鏈表,循環鏈表等,雖然形式眾多,但大同小異,都是由一個個節點(NODE)鏈接起來的。在java中,有位于utils包下封裝好的LinkedList類可以使用,它的底層實現就是鏈表,而在c語言中就需要我們自己去實現鏈表,這對我們理解c語言里面的指針和內存分配都是有著不小的幫助。
鏈表除了首節點和尾節點其他的節點都有前驅和后繼,它和ArrayList的區別有一點就是ArrayList的內存之間是相鄰的,而鏈表則是離散分布的,由指針將它們連接在了一起,話不多說,直接上代碼
#include<stdio.h>#include<stdlib.h>#include<malloc.h>struct NODE{ int age; char*name; struct NODE*next;};int main(){ struct NODE*head; struct NODE*tail; struct NODE*p; int i,val,length; char*n; head = (struct NODE*)malloc(sizeof(struct NODE)); if(head==NULL){ PRintf("分配內存出現錯誤/n"); exit(-1); }else{ tail = head; head->next = NULL; printf("輸入鏈表的長度/n"); scanf("%d",&length); for(i=0;i<length;i++){ p = (struct NODE*)malloc(sizeof(struct NODE)); if(p==NULL){ printf("分配內存出現錯誤/n"); exit(-1); }else{ printf("請輸入每一個人的年齡和姓名/n"); printf("第%d個人的年齡: ",i+1); scanf("%d",&val); printf("第%d個人的姓名: ",i+1); scanf("%s",n); p->age = val; p->name = n; tail->next = p; p->next = NULL; tail = p; } } } return 0;} 如果要刪除某一項,一定要記得free(p)以及放空指針,避免內存泄漏和野指針。參考博客:學習心得:鏈表的操作(C語言實現)
新聞熱點
疑難解答