为什么我的程序总是在stackSize上出错啊

monkey1008611 2018-03-21 08:52:43
编辑的马的遍历问题,用到栈,写了课本上的一个栈,里面有stackSize的应用,但是程序总是运行错误,编译无错,debug之后发现是stackSize出了错误,求各位神仙指教

//自定义栈,链表描述
#include <iostream>
#include <stdlib.h>
using namespace std;

//定义节点
template <class T>
struct chainNode
{
// data members
T element;
chainNode<T> *next;

// methods
chainNode() {}
chainNode(const T& element)
{this->element = element;}
chainNode(const T& element, chainNode<T>* next)
{this->element = element;
this->next = next;}
};

/*******************************************************************************/
template<class T>
class linkedStack
{
public:
linkedStack(int iC = 90)
{ stackTop = NULL; stackSize = 0;}
bool empty() const
{ return stackSize == 0;}
T& top()
{
if(stackSize == 0)
cout<<"sorry,NULL!";
else
return stackTop->element;
}
void pop();
void push(const T& theE)
{
stackTop = new chainNode<T>(theE, stackTop);
stackSize++;
}
int size() const
{
cout<<"debug2"<<stackSize<<endl;
return stackSize;
}

private:
chainNode<T>* stackTop;
int stackSize;
};

template <class T>
void linkedStack<T>::pop()
{
if(stackSize == 0)
cout<<"wrong!";
else{
chainNode<T>* nextNode = stackTop->next;
delete stackTop;
stackTop = nextNode;
stackSize--;
}
}
...全文
356 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
monkey1008611 2018-04-08
  • 打赏
  • 举报
回复
嗷嗷,感谢,我去改改
幻夢之葉 2018-03-21
  • 打赏
  • 举报
回复
你这个程序问题大着去了! 首先 chainNode() {} chainNode(const T& element) {this->element = element;} 这两个构造函数里面应该把没有直接初始化的成员进行默认初始化,比如初始为NULL 2: void push(const T& theE) { stackTop = new chainNode<T>(theE, stackTop); stackSize++; } 你push的操作一直都是对着链表头进行赋值?按照惯常思维应该是增加到链表的最末尾位置(即next指针为NULL的那个地方),这个要建立在第一点完善的基础上 3: pop函数的操作,按照2中逻辑,那么出栈应该删除最末尾指针。又因为你删除的是头指针的下一个指针,而由于第一点提到的没有进行适当的初始化,next可能指向垃圾地址,操作时候导致内存错误 4:不是stackSize上出错,而是你delete操作出问题 PS:关于第2第3点,也可以实现为入栈和出栈都在链表头进行,规则可以自己定,只要保持栈的接口操作的一致性,另外就只有性能方面的考虑了

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧