Re: [問題] C語言初學指引-鏈接串列

看板C_and_CPP (C/C++)作者 (PTT)時間8年前 (2018/03/11 13:30), 8年前編輯推噓4(4013)
留言17則, 7人參與, 8年前最新討論串2/2 (看更多)
看了四天終於有一點頭緒了 因為不是本科系,想把自己的想法PO上來請大家指正 程式碼: https://pastebin.com/pvip381x --------------------------------------------------------- 第7行~11行 --------------------------------------------------------- struct Node { int data; struct Node *link; }; 定義一個資料結構叫做Node,包含兩個部分 一個是int 的資料型態,變數名稱為data 另一個是"存放"struct Node的指標變數,指標變數名稱為link //更正: link 指標變數指向 struct Node// 因為是指向 struct Node 所以要 struct Node *link; 不可以 int *link --------------------------------------------------------- 22行~31行 --------------------------------------------------------- nodePointer GetNode() { nodePointer NewNode; NewNode=(nodePointer) malloc(sizeof(node)); if(NewNode==NULL) { printf("記憶體不足!"); exit(1); } return NewNode; } 23行 定義一個指標變數為 NewNode 24行 sizeof(node)計算出一個節點需要多少空間的記憶體 再用malloc 配置一個記憶體空間 並回傳開頭的記憶體位置,(nodePointer)轉型指標 有點像是格式化這個空間成為struct Node 最後NewNod為該空間的指標。 // 更正: (nodePointer) 代表malloc指標指向struct Node --------------------------------------------------------- 75行開始 --------------------------------------------------------- 由main讀這個程式,當Balls=insertLast(Balls,27); 程式呼叫insertLast函式時,Balls 值為NULL,data 為27 會複製一份給 L=insertFirst(L,d) 中的(L,d) 此時L = NULL , d = 27 執行 insertFirst(L,d) 新增/插入第一個節點 39行 nodePointer insertFirst(nodePointer L,int d) { nodePointer n; n=GetNode(); n->data=d; n->link=L; L=n; return L; } n 為指標,指向新節點 *(n).data = 27 *(n).data = NULL L=n; L 的值原本是 NULL 改成 n (指標) 最後回傳L Balls=insertLast(Balls,27); Balls=L=n 此時串列第一個指標為 Balls 請大家不吝指正,謝謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.226.77.16 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1520746207.A.207.html

03/11 13:32, 8年前 , 1F
struct node* 表示 "指到的東西是node不是其他東西"
03/11 13:32, 1F

03/11 13:32, 8年前 , 2F
和佔用大小無關
03/11 13:32, 2F
※ 編輯: pi2324 (36.226.77.16), 03/11/2018 13:57:19

03/11 19:39, 8年前 , 3F
可以參考ocw上面有開資料結構
03/11 19:39, 3F

03/11 19:52, 8年前 , 4F
寫C的話 malloc 前面不要轉型比較好
03/11 19:52, 4F

03/11 20:10, 8年前 , 5F
沒寫到 free() 的函式
03/11 20:10, 5F

03/11 23:09, 8年前 , 6F
請問指標為什麼一定要int *跟他說是指向誰的指標呢?
03/11 23:09, 6F

03/11 23:10, 8年前 , 7F
反正記憶體位置不就一個數字
03/11 23:10, 7F

03/11 23:17, 8年前 , 8F
還是指向int才知道佔用多少記憶體呢
03/11 23:17, 8F

03/11 23:20, 8年前 , 9F
看不懂 你要指到int 就用int* 要node 就node*
03/11 23:20, 9F

03/12 00:00, 8年前 , 10F
指標的類型主要是讓你做dereference的時候用的吧
03/12 00:00, 10F

03/12 00:00, 8年前 , 11F
int *p = ...; int a = *p; 要知道p是什麼才能做*p
03/12 00:00, 11F

03/12 00:01, 8年前 , 12F
struct Node *p 與 int *p 其實都只是一個值而已
03/12 00:01, 12F

03/12 04:37, 8年前 , 13F
你說的沒錯 但你要存取資料的話要知道他的資料型態
03/12 04:37, 13F

03/12 11:34, 8年前 , 14F
請問h大,為什麼malloc 前不要轉型比較好呢?誠心發問
03/12 11:34, 14F

03/13 00:21, 8年前 , 15F
前一陣子版上的討論 https://goo.gl/J8unR2
03/13 00:21, 15F

03/13 00:34, 8年前 , 16F
延伸 james 補個例子,應該比較好理解~
03/13 00:34, 16F

03/13 00:34, 8年前 , 17F
int i=65; printf("%s\n", (char*)(&i));
03/13 00:34, 17F
文章代碼(AID): #1QfBxV87 (C_and_CPP)
文章代碼(AID): #1QfBxV87 (C_and_CPP)