C++顺序栈求助。。 为什么错了
#include<iostream>usingnamespacestd;typedefstructnode{//结点结构intdata;node*next;}*link;...
#include <iostream>
using namespace std;
typedef struct node{ //结点结构
int data;
node *next;
}*link;
typedef struct stack{ //链栈结构
link top,base;
int len;
}*linkstack;
void Create(stack &s){ //从栈底输入n个元素建立栈
int n;
cout<<"请输入要创建的链栈结点数"<<endl;
cin>>n;
s.base=(link)malloc(sizeof(node));
link p=s.base;
cout<<"请从栈底输入链栈"<<endl;
for(int i=0;i<n;i++){
cin>>p->data;
p=p->next;
p=(link)malloc(sizeof(node));
}
s.top=p;
s.len=n;
}
void Insert(stack &s){ //在栈顶插入元素
int e;
cout<<"请输入要插入的整数"<<endl;
cin>>e;
s.top->data=e;
s.top=s.top->next;
s.top=(link)malloc(sizeof(node));
s.len++;
}
void Get(stack &s,int &e){ //返回栈顶元素
link p=s.base;
p=p->next; //就是大概这里!!!!!!!!!!!!!我试了让p只指向下一个结点还是
//不行,编译没错但运行直接退出了????????????
e=p->data;
}
int main(){
stack s;
int e;
Create(s);
//Insert(s);
Get(s,e);
return 0;
}
看那个Get的函数,为什么运行会出错??????????
额不好意思 链栈 不是顺序栈。。 展开
using namespace std;
typedef struct node{ //结点结构
int data;
node *next;
}*link;
typedef struct stack{ //链栈结构
link top,base;
int len;
}*linkstack;
void Create(stack &s){ //从栈底输入n个元素建立栈
int n;
cout<<"请输入要创建的链栈结点数"<<endl;
cin>>n;
s.base=(link)malloc(sizeof(node));
link p=s.base;
cout<<"请从栈底输入链栈"<<endl;
for(int i=0;i<n;i++){
cin>>p->data;
p=p->next;
p=(link)malloc(sizeof(node));
}
s.top=p;
s.len=n;
}
void Insert(stack &s){ //在栈顶插入元素
int e;
cout<<"请输入要插入的整数"<<endl;
cin>>e;
s.top->data=e;
s.top=s.top->next;
s.top=(link)malloc(sizeof(node));
s.len++;
}
void Get(stack &s,int &e){ //返回栈顶元素
link p=s.base;
p=p->next; //就是大概这里!!!!!!!!!!!!!我试了让p只指向下一个结点还是
//不行,编译没错但运行直接退出了????????????
e=p->data;
}
int main(){
stack s;
int e;
Create(s);
//Insert(s);
Get(s,e);
return 0;
}
看那个Get的函数,为什么运行会出错??????????
额不好意思 链栈 不是顺序栈。。 展开
3个回答
展开全部
#include <iostream>
using namespace std;
typedef struct node{ //结点结构
int data;
node *next;
}*link;
typedef struct stack{ //链栈结构
link top,base;
int len;
}*linkstack;
void Create(stack &s){ //从栈底输入n个元素建立栈
int n;
cout<<"请输入要创建的链栈结点数"<<endl;
cin>>n;
s.base=(link)malloc(sizeof(node));
link p=s.base;
cout<<"请从栈底输入链栈"<<endl;
for(int i=0;i<n;i++){
cin>>p->data;
s.top=p; //这里做了修改
p=p->next;
p=(link)malloc(sizeof(node));
}
//s.top=p;
s.len=n;
}
void Insert(stack &s){ //在栈顶插入元素
int e;
cout<<"请输入要插入的整数"<<endl;
cin>>e;
s.top->data=e;
s.top=s.top->next;
s.top=(link)malloc(sizeof(node));
s.len++;
}
int Get(stack &s,int &e){ //返回栈顶元素
link p=s.top;//这里做了修改
//p=p->next; //就是大概这里!!!!!!!!!!!!!我试了让p只指向下一个结点还是
//不行,编译没错但运行直接退出了????????????
e=p->data;
return e;//s.top->date;
}
int main(){
stack s;
int e;
Create(s);
//Insert(s);
printf("%d",Get(s,e));
//system("pause");
return 0;
}
修改的地方做了标记,运行结果如下图
展开全部
你好,错误找到了,原因是你先把p赋值成下一个节点,然后才申请内存又再次赋值给了p,没有将链表接起来,只需你把如下代码:
p=p->next;
p=(link)malloc(sizeof(node));
改为如下代码就好了:
p->next = (link)malloc(sizeof(node));//改为这样就好了
p=p->next;
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询