[问题] Linked list 想法是否正确

楼主: sbk8027 (小朱)   2016-04-11 22:44:40
各位前辈大家好 小弟最近自学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);
}
因为自己练习的所以不太知道这样做是否正确,想请前辈们帮小弟看一下
感觉这个章节有点困难似懂非懂的,而且这个做法好像有点蠢
再麻烦各位前辈了
万分感谢!!感激不尽!!!!
作者: 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