作者pi2324 (PTT)
看板C_and_CPP
標題Re: [問題] C語言初學指引-鏈接串列
時間Sun Mar 11 13:30:04 2018
看了四天終於有一點頭緒了
因為不是本科系,想把自己的想法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
推 jerryh001: struct node* 表示 "指到的東西是node不是其他東西" 03/11 13:32
→ jerryh001: 和佔用大小無關 03/11 13:32
※ 編輯: pi2324 (36.226.77.16), 03/11/2018 13:57:19
推 smartjay: 可以參考ocw上面有開資料結構 03/11 19:39
→ hunandy14: 寫C的話 malloc 前面不要轉型比較好 03/11 19:52
→ hunandy14: 沒寫到 free() 的函式 03/11 20:10
→ pi2324: 請問指標為什麼一定要int *跟他說是指向誰的指標呢? 03/11 23:09
→ pi2324: 反正記憶體位置不就一個數字 03/11 23:10
→ pi2324: 還是指向int才知道佔用多少記憶體呢 03/11 23:17
→ jerryh001: 看不懂 你要指到int 就用int* 要node 就node* 03/11 23:20
→ james732: 指標的類型主要是讓你做dereference的時候用的吧 03/12 00:00
→ james732: int *p = ...; int a = *p; 要知道p是什麼才能做*p 03/12 00:00
→ james732: struct Node *p 與 int *p 其實都只是一個值而已 03/12 00:01
推 steve1012: 你說的沒錯 但你要存取資料的話要知道他的資料型態 03/12 04:37
推 soso7885: 請問h大,為什麼malloc 前不要轉型比較好呢?誠心發問 03/12 11:34
→ hunandy14: 延伸 james 補個例子,應該比較好理解~ 03/13 00:34
→ hunandy14: int i=65; printf("%s\n", (char*)(&i)); 03/13 00:34