读书人

为什么小弟我编写的栈总是出现工作停止

发布时间: 2012-11-03 10:57:44 作者: rapoo

为什么我编写的栈总是出现工作停止
其源代码如下:
#include<iostream>
#include<stdlib.h>
using namespace std;
struct Node
{
int data;
struct Node *next;
};
class LinkStack
{
public:
void intStack();
void ClearStack();
void Push(int d);//入栈
int Pop();//出栈
int GetTop();
bool Empty();
void Print();
private:
struct Node *top;
int length;
};
void LinkStack::intStack()
{
top = new Node;
if(!top)
{
exit(1);
}
else
{
top->next = NULL;
}
}
void LinkStack::ClearStack()
{
if(top == NULL)
{
exit(1);
}
else
{
while(top->next != NULL)
{
struct Node *p;//工作指针
p = top->next;
top->next = p->next;
delete p;
}
}
}
void LinkStack::Push(int d)
{
struct Node *p;
if(!p)
{
exit(1);
}
else
{
p->data = d;
p->next = top->next;
top->next = p;
}
}
int LinkStack::Pop()
{
if(Empty())
{
cout<<"False!"<<endl;
}
else
{
int x;
struct Node *p;//工作指针
p = top->next;
top->next = p->next;
x = p->data;
delete p;
return x;
}
}
int LinkStack::GetTop()
{
if(Empty())
{
cout<<"False!"<<endl;
}
else
{
return top->next->data;
}
}
bool LinkStack::Empty()
{
if(top == NULL)
{
exit(1);
}
else if(top->next == NULL)
{
return true;
}
else
{
return false;
}
}
void LinkStack::Print()
{
struct Node *p;//工作指针
p = top->next;
while(p != NULL)
{
cout<<p->data<<'\t';
p = p->next;
}
}
int main()
{
int num;
LinkStack S1;
S1.intStack();
while(1)
{
cin>>num;
if(num == -1)
{
break;
}
S1.Push(num);
}
S1.Print();
S1.ClearStack();
}
我已经看了好几遍了,总找不出问题,希望能有人指点

[解决办法]
单步调试
[解决办法]
学习调试是程序员的必经之路.
[解决办法]
void LinkStack::Push(int d)
{
struct Node *p; //这里只声明了一个指向node的指针,并没有申请内存.下面对其date赋值,必然导致崩溃
if(!p)
{
exit(1);
}
else
{
p->data = d;
p->next = top->next;
top->next = p;
}
}

读书人网 >C++

热点推荐