C语言链表的来源分析
C語言中的鏈表是重點,也是難點,而且意義非凡。對鏈表的的抽象和恐懼是源于對它的來龍去脈的不明白。所以很有必要對它的發(fā)展淵源做透徹分析。
鏈表的單位是節(jié)點,而節(jié)點源于復(fù)合數(shù)據(jù)類型:結(jié)構(gòu)體;
節(jié)點和結(jié)構(gòu)體的區(qū)別就是看是否有指針域,目的就是想找到下一個節(jié)點;
結(jié)構(gòu)體形如:
struct Ghost
{
char name[30];
int age;
int height;
char addr[30];
};
節(jié)點形如:
struct Ghost
{
char name[30];
int age;
int height;
char addr[30];
struct Ghost *next;
};
現(xiàn)在來看一下創(chuàng)建1個節(jié)點的情況:
效果如下:
那么申請多個節(jié)點呢?如3個。
核心代碼如下:
//堆中申請變量
struct Ghost *g1 = (struct Ghost*)malloc(sizeof(struct Ghost));
struct Ghost *g2 = (struct Ghost*)malloc(sizeof(struct Ghost));
struct Ghost *g3 = (struct Ghost*)malloc(sizeof(struct Ghost));
//賦值
strcpy(g1->name, "聶小倩");
g1->age = 22;
g1->height = 165;
strcpy(g1->addr, "蘭若寺");
g1->next = NULL;
//賦值
strcpy(g2->name, "付清風(fēng)");
g2->age = 23;
g2->height = 166;
strcpy(g2->addr, "十里亭");
g2->next = NULL;
//賦值
strcpy(g3->name, "東方不敗");
g3->age = 24;
g3->height = 167;
strcpy(g3->addr, "黑木崖");
g3->next = NULL;
//遍歷
printf("姓名:%s", g1->name);
printf("年齡:%d", g1->age);
printf("身高:%d", g1->height);
printf("地址:%s", g1->addr);
//遍歷
printf("姓名:%s", g2->name);
printf("年齡:%d", g2->age);
printf("身高:%d", g2->height);
printf("地址:%s", g2->addr);
//遍歷
printf("姓名:%s", g3->name);
printf("年齡:%d", g3->age);
printf("身高:%d", g3->height);
printf("地址:%s", g3->addr);
效果圖:
成功是成功了,但這很原始,可以改進的:借助成員指針的力量自動去找下一個,讓鏈起來!
對賦值做改動:
那么遍歷就可以改進了:
效果:
這樣,我只要知道第1個節(jié)點的位置,后面的就可以一股腦的扯出來。這就是鏈表。
特點:鏈表是一連串節(jié)點鏈起來的,是線性特點。只要拿第1個節(jié)點,就可以把一堆的節(jié)點都找到。就像貪吃蛇一樣,蛇頭走到哪里,蛇身和蛇尾就跟到哪里。
和數(shù)組類似,數(shù)組的第1個元素的首地址就是數(shù)組的地址;鏈表的第1個節(jié)點的地址就是鏈表的首地址;
接下來就可以封裝出操作鏈表的函數(shù)了,如:遍歷鏈表,添加節(jié)點,刪除節(jié)點,統(tǒng)計節(jié)點。
更多詳細(xì)的鏈表分析參考《C語言,好爽》第7版(2017年)寧采臣錄制的。
轉(zhuǎn)載于:https://blog.51cto.com/ningcaichen66/1969643
總結(jié)
以上是生活随笔為你收集整理的C语言链表的来源分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 标签UI生成器
- 下一篇: nltk book的下载