[问题] 用sturct做的linked list实作stack问题

楼主: jack710619 (ECLin)   2014-08-17 16:23:02
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
C++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
小弟我最近再练习资料结构的东西
现在写到用linked list 做stack
照著书本打的结果
把infix 转成postfix表示输出的时候出了一点小问题
并不是什么太大的错误
只是个人有点龟毛
测试过的结果是我linked list初始化的问题
但是我不晓得要怎么初始化才不会多出那个空格
这个有办法解吗?
喂入的资料(Input):
1-1+1-1+1
预期的正确结果(Expected Output):
1 1 - 1 + 1 - 1 +
(数字跟数字 / 符号之间都是一个空格)
错误结果(Wrong Output):
1 1 - 1 + 1 - 1 +
^这里多了一个空格
程式码(Code):(请善用置底文网页, 记得排版)
struct Node //Node 宣告
{
char data;
Node *next;
};
struct Node* init(Node *ptr) //初始化的宣告
{
ptr -> data = '\0';
ptr -> next = NULL;
return ptr;
}
保险起见附上整个档案

作者: stu87616 (文组工程师)   2014-08-17 21:14:00
你的堆叠默认会有一个以\0为资料的头 在堆叠推出来的时后会当作一个要输出的单位 当然因为\0贴不出东西没差但是你又每次贴东西的时候都加一个空格(方便阅读?)所以就会导致堆叠在输出\0的时候就多一个空格了解决办法应该是不要让堆叠前面有一个\0当头 只是这样就要写pop push相关判定 当头是空的时候会有点不一样或是贴东西的时候 顺便的空格都拿掉 眼不见为净
楼主: jack710619 (ECLin)   2014-08-17 21:39:00
如果说像上面stu大大说的pop push相关判定 可以给小弟一些方向吗?
作者: stu87616 (文组工程师)   2014-08-17 21:41:00
我的作法是初始设为NULL stack=NULL然后push时要先判定stack是否为NULL如果为NULL 就不是把新增的节点加在next而是直接stack=newnode 这样不过老实说这样整个code会变比较也比较丑(我认为)^长或是在最后输出的时候检查输出字串 把那颗空节点和附属的空格删掉也是蛮省事的作法 (我会这样
楼主: jack710619 (ECLin)   2014-08-17 22:00:00
原来如此,之后试试看结果我是把最开始的那个初始值pop掉......我懂stu大的意思了,是我会错意了 ,明天来试试看,感谢大大
作者: ppc ( )   2014-08-19 00:19:00
Node *stack=NULL; init那行删掉用不到 改这两行就可以了

Links booklink

Contact Us: admin [ a t ] ucptt.com