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的函数,为什么运行会出错??????????
额不好意思 链栈 不是顺序栈。。
展开
 我来答
百度网友0ecab4f
2014-12-13 · TA获得超过1028个赞
知道小有建树答主
回答量:412
采纳率:0%
帮助的人:377万
展开全部
#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;
}

修改的地方做了标记,运行结果如下图

人生做回自己
推荐于2016-02-17 · TA获得超过423个赞
知道小有建树答主
回答量:722
采纳率:100%
帮助的人:515万
展开全部

你好,错误找到了,原因是你先把p赋值成下一个节点,然后才申请内存又再次赋值给了p,没有将链表接起来,只需你把如下代码:

p=p->next;
  p=(link)malloc(sizeof(node));


改为如下代码就好了:

    p->next = (link)malloc(sizeof(node));//改为这样就好了
  p=p->next;
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
打码专职员工
2014-12-13
知道答主
回答量:6
采纳率:0%
帮助的人:7525
展开全部

能运行,只是可能指针有问题,读出来的数据不是你想指到的哪个

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式