作者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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1520746207.A.207.html
1F:推 jerryh001: struct node* 表示 "指到的东西是node不是其他东西" 03/11 13:32
2F:→ jerryh001: 和占用大小无关 03/11 13:32
※ 编辑: pi2324 (36.226.77.16), 03/11/2018 13:57:19
3F:推 smartjay: 可以参考ocw上面有开资料结构 03/11 19:39
4F:→ hunandy14: 写C的话 malloc 前面不要转型比较好 03/11 19:52
5F:→ hunandy14: 没写到 free() 的函式 03/11 20:10
6F:→ pi2324: 请问指标为什麽一定要int *跟他说是指向谁的指标呢? 03/11 23:09
7F:→ pi2324: 反正记忆体位置不就一个数字 03/11 23:10
8F:→ pi2324: 还是指向int才知道占用多少记忆体呢 03/11 23:17
9F:→ jerryh001: 看不懂 你要指到int 就用int* 要node 就node* 03/11 23:20
10F:→ james732: 指标的类型主要是让你做dereference的时候用的吧 03/12 00:00
11F:→ james732: int *p = ...; int a = *p; 要知道p是什麽才能做*p 03/12 00:00
12F:→ james732: struct Node *p 与 int *p 其实都只是一个值而已 03/12 00:01
13F:推 steve1012: 你说的没错 但你要存取资料的话要知道他的资料型态 03/12 04:37
14F:推 soso7885: 请问h大,为什麽malloc 前不要转型比较好呢?诚心发问 03/12 11:34
16F:→ hunandy14: 延伸 james 补个例子,应该比较好理解~ 03/13 00:34
17F:→ hunandy14: int i=65; printf("%s\n", (char*)(&i)); 03/13 00:34