刚刚上完链式栈课,凭着理解写了个入栈的代码,调试不运行,求指教,该怎么解决
刚刚上完链式栈课,凭着理解写了个入栈的代码,调试不运行,求指教
------解决方案--------------------
有几个点:
1.s->next=head->next;
head->next=s;
着两行代码用到了head->next,没有初始化的。构造函数里面你用的是指针,这里直接吧s 给head就好了。
2. while(p->next==NULL)
{
p=p->next;
cout<<p->data<<endl;
}这里你是想实现pop操作吧?如果是等于NULL,这个循环一般情况下都进不去吧?进去了还往后移动一个就跟不对了吧?
3.out操作里面 是不是应该实现一个加个delete? 既然分配了内存,就应该有释放。
4.main函数最好不要用void,没有这样的写法。用int main,记得return
------解决方案--------------------
除了上述问题外,最好加一个node的构造函数,把next初始化一下。
#include <iostream>
using namespace std;
struct node
{
node *next;
int data;
};
class link
{
private:
node *head;
public:
link(){head=NULL;}
void push(int i);
void out();
};
void link::push(int i)
{
node *s;
s=new node;
s->data = i;
s->next=head->next;
head->next=s;
}
void link::out()
{
node *p;
p = head;
while(p->next==NULL)
{
p=p->next;
cout<<p->data<<endl;
}
}
void main()
{
link A;
A.push(1);
A.push(2);
A.push(3);
A.out();
}
------解决方案--------------------
有几个点:
1.s->next=head->next;
head->next=s;
着两行代码用到了head->next,没有初始化的。构造函数里面你用的是指针,这里直接吧s 给head就好了。
2. while(p->next==NULL)
{
p=p->next;
cout<<p->data<<endl;
}这里你是想实现pop操作吧?如果是等于NULL,这个循环一般情况下都进不去吧?进去了还往后移动一个就跟不对了吧?
3.out操作里面 是不是应该实现一个加个delete? 既然分配了内存,就应该有释放。
4.main函数最好不要用void,没有这样的写法。用int main,记得return
------解决方案--------------------
除了上述问题外,最好加一个node的构造函数,把next初始化一下。