[問題] Linked list 想法是否正確

作者: sbk8027 (小朱)   2016-04-11 22:44:40
各位前輩大家好 小弟最近自學C語言到資料結構的部分
今天在練習單向的單向鏈結
我用的是 Dev C++來寫 電腦是win7
因為剛進入這個章節所以只是先簡單的 創造節點 連結節點 刪除節點
我預期的動作流程如

程式碼如下
#include<stdio.h>
#include <stdlib.h>
struct listNode {
char data;
struct listNode *nextPtr;
};
typedef struct listNode *ListNodePtr;
int main(void){
ListNodePtr startptr=NULL;//把startptr指向NULL
ListNodePtr ONE_node;//創立第一個節點
ONE_node=(ListNodePtr)malloc(sizeof(listNode));//給定實體空間
startptr=ONE_node;//把startptr指向第一個節點
ONE_node->data=10;
ONE_node->nextPtr=NULL;//把第一個節點指向NULL
ListNodePtr TWO_node;//創立第二個節點希望把第一個節點指向第二個節點
TWO_node=(ListNodePtr)malloc(sizeof(listNode));//給定實體空間
TWO_node->data=11;
TWO_node->nextPtr=NULL;//把第二個節點指向NULL
ONE_node->nextPtr=TWO_node;//把第一個節點指向第二個節點
ListNodePtr THREE_node;//創立第三個節點希望第二個節點指向第三個節點
THREE_node=(ListNodePtr)malloc(sizeof(listNode));//給定實體空間
THREE_node->data=13;
THREE_node->nextPtr=NULL;//把第三個節點指向NULL
TWO_node->nextPtr=THREE_node;//把第二個節點指向地三個節點
ListNodePtr FOUR_node;//創立第四個節點
//希望插在第二個節點和第三個節點中間
FOUR_node=(ListNodePtr)malloc(sizeof(listNode));//給定實體空間
FOUR_node->data=12;
TWO_node->nextPtr=FOUR_node;//把第二個節點指向第四個節點
FOUR_node->nextPtr=THREE_node;//把第四個節點只向第三個節點
printf("\n%s",THREE_node->nextPtr);
printf("\n%d",THREE_node);
printf("\n%d",FOUR_node->nextPtr);
/////////////////////////////////////////////////////
//刪除節點
//我希望能刪除第一個節點
startptr=TWO_node;//先把起始位置改成第二個節點
free(ONE_node);//釋放第一個節點
printf("\n%d",ONE_node->data);
//這裡輸出的值是-112不知道是否正確
////////////////////////////////////////////////////
//希望能刪除第四個節點
//把第二個節點指向第三個節點
TWO_node->nextPtr=THREE_node;
free(FOUR_node);//釋放第四個節點
printf("\n%d",TWO_node->nextPtr);
printf("\n%d",THREE_node);
printf("\n%d",FOUR_node->nextPtr);
}
因為自己練習的所以不太知道這樣做是否正確,想請前輩們幫小弟看一下
感覺這個章節有點困難似懂非懂的,而且這個做法好像有點蠢
再麻煩各位前輩了
萬分感謝!!感激不盡!!!!
作者: wtchen (沒有存在感的人)   2016-04-11 22:59:00
typedef struct listNode *ListNodePtr; -> 這行是怎樣?typedef應該沒有把struct定義成pointer的能力吧
作者: LPH66 (-6.2598534e+18f)   2016-04-11 23:01:00
樓上漏看 * 了
作者: WBTs (加權平衡樹)   2016-04-11 23:02:00
http://goo.gl/75ehH3typedef 可不用,重點在宣告指向結構的指標你的printf是要prinf節點的值?
作者: Frozenmouse (*冰之鼠*)   2016-04-11 23:43:00
別 free 掉後又再去取值,移到 free 前 @@其他感覺還好,會覺得有點蠢會不會是因為你額外又用了四個指標去指個別的node?XD
作者: WBTs (加權平衡樹)   2016-04-11 23:53:00
https://ideone.com/3upCpN 我照你的要求寫的,參考1下
作者: wtchen (沒有存在感的人)   2016-04-11 23:56:00
typedef A B 是把type A取個別名叫B可我沒看過typedef A B*的用法,是我太孤陋寡聞?少掉typedef我就能理解了....
作者: WBTs (加權平衡樹)   2016-04-12 00:02:00
typedef A B* 好像函數指標
作者: Frozenmouse (*冰之鼠*)   2016-04-12 00:05:00
typedef A* B如果是 typedef A B* 應該會錯吧…
作者: WBTs (加權平衡樹)   2016-04-12 00:07:00
串列應該最少2個START和NEW,只是要像我第1個連結一樣從頭找另外若不要看起來那麼多就寫在函數,傳要加入or刪除的節點
作者: LPH66 (-6.2598534e+18f)   2016-04-12 00:14:00
typedef 的解釋法最簡單的正是把 typedef 去掉去掉之後若變成宣告某名為某型態的變數這 typedef 即是定此名為此型態的別名
作者: wtchen (沒有存在感的人)   2016-04-12 00:23:00
所以typedef struct listNode *ListNodePtr;這裡的*ListNodePtr會是指標還是整個struct?
作者: Frozenmouse (*冰之鼠*)   2016-04-12 00:26:00
A=struct listNode *, B=ListNodePtr如果你堅持要說*B的話那它是那個結構無誤XD
作者: WBTs (加權平衡樹)   2016-04-12 00:27:00
指標吧
作者: wtchen (沒有存在感的人)   2016-04-12 00:32:00
看來我腦殘了,這樣我了了 XD
作者: sbk8027 (小朱)   2016-04-12 23:12:00
感謝各位大大指點迷津!!

Links booklink

Contact Us: admin [ a t ] ucptt.com