关于链表的简单创建和遍历
這是網(wǎng)上的的源碼:
自己照著視頻敲了一遍,結(jié)果卡在一個(gè)點(diǎn)上
#include<stdio.h> //創(chuàng)建非循環(huán)鏈表 #include<stdlib.h> #include<malloc.h> typedef struct Node { int data; struct Node *pNext; }NODE,*PNODE;//相當(dāng)于直接給了個(gè)*號(hào) struct Node *int main(void) {PNODE pHead =NULL;//相當(dāng)于 struct Node *pHead =Null;先定義清空指針 pHead = create_list();traverse_list(pHead);return 0; }PNODE create_list(void); {int len,i,val;PNODE pHead=(PNODE)malloc(sizeof(Node));//分配pHead pintf("請(qǐng)輸入你要生成幾個(gè)節(jié)點(diǎn)");scanf("%d",&len);PNODE pTail=pHead;pTail->pNext=NULL;for(i=0;i<len;i++){printf("請(qǐng)輸入第%d個(gè)數(shù)",i+1);scanf("%d",&val);PNODE pNew =(PNODE)malloc(sizeof(Node));//分配pNew pNew->data= val;pTail->pNext=pNew;pNew->pNext=NULL;pTail=pNew; }return pHead; }void traverse_list(PNODE pHead) {PNODE p = pHead->pNext; //將頭節(jié)點(diǎn)的指針給予臨時(shí)節(jié)點(diǎn)pwhile(NULL != p) //節(jié)點(diǎn)p不為空,循環(huán){printf("%d ",p->data); p = p->pNext; }printf("\n");return;}
老是說(shuō)定義的函數(shù)類型沖突,哪有沖突啊,不是返回地址型嘛,都是用PNODE的啊,咋就錯(cuò)了呢,比較了一下上面的代碼感覺都一樣就是不知道哪里出了bug,改天再看看。
創(chuàng)造鏈表:先分配內(nèi)存,給數(shù)據(jù)域賦值,將尾結(jié)點(diǎn)指向臨時(shí)節(jié)點(diǎn),再將臨時(shí)節(jié)點(diǎn)指向空,最后將臨時(shí)節(jié)點(diǎn)賦給尾結(jié)點(diǎn)。
就像一條蛇一樣,先創(chuàng)造一個(gè)東西,然后將它吞并,再創(chuàng)造下一個(gè)東西,再吞并。
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
#######################################################################################
今天我又重新檢查了一遍上面的代碼,一個(gè)一個(gè)比對(duì)終于發(fā)現(xiàn)了問題
首先函數(shù)后面能加分號(hào)嘛?昨天檢查了那么多遍還是沒搞出來(lái),的確是狀態(tài)不好。這么低級(jí)的錯(cuò)誤都沒發(fā)現(xiàn),這個(gè)函數(shù)又不是放在主函數(shù)里的。需要加什么分號(hào)。
其次結(jié)構(gòu)體和主函數(shù)之間是需要添加函數(shù)聲明的,我一直以為這只是個(gè)形式,我以前從來(lái)沒遇到過(guò)函數(shù)還要聲明的情況,函數(shù)不是只能調(diào)用嗎…也只有變量需要聲明吧(手動(dòng)滑稽)!
第三個(gè)錯(cuò)誤就是我把printf給寫漏了一個(gè)字母,這看上去讓人崩潰,幾十行幾百行的代碼,一個(gè)單詞少寫一個(gè)字母也是在所難免的啊,可程序就是不放過(guò)你的這個(gè)錯(cuò)誤,行吧,我認(rèn)了。
可以看到吧,這就是純手打代碼的弊端,錯(cuò)誤率居高不下,找bug找到讓人崩潰。
但還是有點(diǎn)收獲的,自己寫的能讓自己對(duì)這個(gè)程序更加的了解、熟知,對(duì)以前不知道,不注意的地方進(jìn)行補(bǔ)充。
同時(shí)也讓我掌握了一種學(xué)習(xí)方法,就是想不明白的,不要著急,現(xiàn)在不明白,可以存疑留到明天,明天甚至可以再存到后天,只要每天有點(diǎn)感悟就好了。
總結(jié)一下吧
最難的就是構(gòu)造鏈表了,想明白了,就算你鏈表入門了
附上我改好后的鏈表(純手打)
#include<stdio.h> //創(chuàng)建非循環(huán)鏈表 #include<stdlib.h> #include<malloc.h> typedef struct Node { int data; struct Node *pNext; }NODE,*PNODE;//相當(dāng)于直接給了個(gè)*號(hào) struct Node *// 函數(shù)聲明 PNODE create_list(); // 創(chuàng)建鏈表函數(shù) void traverse_list(PNODE); // 遍歷鏈表函數(shù)int main(void) {PNODE pHead =NULL;//相當(dāng)于 struct Node *pHead =Null;先定義清空指針 pHead = create_list();traverse_list(pHead);return 0; }PNODE create_list(void) {int len,i,val;PNODE pHead=(PNODE)malloc(sizeof(NODE));//分配pHead printf("請(qǐng)輸入你要生成幾個(gè)節(jié)點(diǎn)");scanf("%d",&len);PNODE pTail=pHead;pTail->pNext=NULL;for(i=0;i<len;i++){printf("請(qǐng)輸入第%d個(gè)數(shù)",i+1);scanf("%d",&val);PNODE pNew =(PNODE)malloc(sizeof(NODE));//分配pNew pNew->data= val;pTail->pNext=pNew;pNew->pNext=NULL;pTail=pNew; }return pHead; }void traverse_list(PNODE pHead) {PNODE p = pHead->pNext; //將頭節(jié)點(diǎn)的指針給予臨時(shí)節(jié)點(diǎn)pwhile(NULL != p) //節(jié)點(diǎn)p不為空,循環(huán){printf("%d ",p->data); p = p->pNext; }printf("\n");return;}至于鏈表的刪除,插入,修改之類的,放到以后學(xué)了,有時(shí)間有心情就會(huì)來(lái)看看,慢慢來(lái)!!!
試試如何改變字體的顏色
試試如何改變字體的顏色
總結(jié)
以上是生活随笔為你收集整理的关于链表的简单创建和遍历的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 青城山最大禁忌有什么 青城山最大禁忌简单
- 下一篇: 一步一步详解高斯日记