作者sbk8027 (小朱)
看板C_and_CPP
标题[问题] Linked list 想法是否正确
时间Mon Apr 11 22:44:40 2016
各位前辈大家好 小弟最近自学C语言到资料结构的部分
今天在练习单向的单向链结
我用的是 Dev C++来写 电脑是win7
因为刚进入这个章节所以只是先简单的 创造节点 连结节点 删除节点
我预期的动作流程如
http://imgur.com/qYbrYgG
程式码如下
#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);
}
因为自己练习的所以不太知道这样做是否正确,想请前辈们帮小弟看一下
感觉这个章节有点困难似懂非懂的,而且这个做法好像有点蠢
再麻烦各位前辈了
万分感谢!!感激不尽!!!!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.169.89.201
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1460385882.A.255.html
※ 编辑: sbk8027 (1.169.89.201), 04/11/2016 22:53:00
1F:→ wtchen: typedef struct listNode *ListNodePtr; -> 这行是怎样? 04/11 22:59
2F:→ wtchen: typedef应该没有把struct定义成pointer的能力吧 04/11 23:00
3F:推 LPH66: 楼上漏看 * 了 04/11 23:01
5F:推 WBTs: typedef 可不用,重点在宣告指向结构的指标 04/11 23:15
6F:推 WBTs: 你的printf是要prinf节点的值? 04/11 23:25
7F:推 Frozenmouse: 别 free 掉後又再去取值,移到 free 前 @@ 04/11 23:43
8F:推 Frozenmouse: 其他感觉还好,会觉得有点蠢会不会是因为你额外又用 04/11 23:47
9F:→ Frozenmouse: 了四个指标去指个别的node?XD 04/11 23:47
11F:→ wtchen: typedef A B 是把type A取个别名叫B 04/11 23:56
12F:→ wtchen: 可我没看过typedef A B*的用法,是我太孤陋寡闻? 04/11 23:56
13F:→ wtchen: 少掉typedef我就能理解了.... 04/11 23:58
14F:推 WBTs: typedef A B* 好像函数指标 04/12 00:02
15F:推 Frozenmouse: typedef A* B 04/12 00:05
16F:→ Frozenmouse: 如果是 typedef A B* 应该会错吧… 04/12 00:07
17F:推 WBTs: 串列应该最少2个START和NEW,只是要像我第1个连结一样从头找 04/12 00:07
18F:推 WBTs: 另外若不要看起来那麽多就写在函数,传要加入or删除的节点 04/12 00:13
19F:推 LPH66: typedef 的解释法最简单的正是把 typedef 去掉 04/12 00:14
20F:→ LPH66: 去掉之後若变成宣告某名为某型态的变数 04/12 00:14
21F:→ LPH66: 这 typedef 即是定此名为此型态的别名 04/12 00:15
22F:→ wtchen: 所以typedef struct listNode *ListNodePtr; 04/12 00:23
23F:→ wtchen: 这里的*ListNodePtr会是指标还是整个struct? 04/12 00:23
24F:推 Frozenmouse: A=struct listNode *, B=ListNodePtr 04/12 00:26
25F:→ Frozenmouse: 如果你坚持要说*B的话那它是那个结构无误XD 04/12 00:26
26F:推 WBTs: 指标吧 04/12 00:27
27F:推 wtchen: 看来我脑残了,这样我了了 XD 04/12 00:32
28F:→ sbk8027: 感谢各位大大指点迷津!! 04/12 23:12