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