急!急!使用链栈实现10进制数转换为2进制数(c语言),为什么程序执行会出错?请大家帮忙看看,谢谢。

#include<stdio.h>typedefstructstacknode{intdata;structstacknode*next;}stacknode;typed... #include <stdio.h>
typedef struct stacknode{
int data;
struct stacknode *next;
}stacknode;
typedef struct{
stacknode *top;
}linkstack;
void initstack(linkstack &s){
s.top=NULL;
}
int isemptystack(linkstack s)
{
if(s.top==NULL)
return 1;
else
return 0;
}
void push(linkstack &s,int x){
stacknode *p;
p->data=x;
p->next=s.top;
s.top=p;
}
int pop(linkstack &s,int &x)
{
stacknode *p;
p=s.top;
if(isemptystack(s))
return 0;
else
{x=p->data;
s.top=p->next;
return 1;
}
}
void main()
{
linkstack s;
int x,n,y;
printf("请输入您要转换的十进制数:");
scanf("%d",n);
s.top=NULL;
while(n!=0)
{
x=n%2;
n=n/2;
push(s,x);
};
printf("转换后的二进制数位:");
while(isemptystack(s)!=0)
{ pop(s,y);
printf("%d",y);
}
}
展开
 我来答
xuzewei_
2013-10-17 · TA获得超过154个赞
知道答主
回答量:86
采纳率:0%
帮助的人:79.7万
展开全部

我看了一下你的程序,把你的程序调通了,如下:

#include <stdio.h>
typedef struct stacknode{
    int data;
    struct stacknode *next;
}stacknode;
typedef struct{
stacknode *top;
}linkstack;
void initstack(linkstack &s){
s.top=NULL;
}
int isemptystack(linkstack s)
{
if(s.top==NULL)
return 1;
else
return 0;
}
void push(linkstack &s,int x){
stacknode *p = new stacknode;//要申请空间,用new申请
p->data=x;
p->next=s.top;
s.top=p;
}
int pop(linkstack &s,int &x)
{
stacknode *p= new stacknode;//要申请空间,用new申请
p=s.top;
if(isemptystack(s))
return 0;
else
{x=p->data;
s.top=p->next;
return 1;
}
}
int main()
{
linkstack s;
int x,n,y;
    printf("请输入您要转换的十进制数:");
scanf("%d",&n);//n要用取地址符号&
s.top=NULL;
while(n!=0)
{
        x = n % 2;
        n = n / 2;
        push(s, x);
};
printf("转换后的二进制数位:");
while(isemptystack(s)!=0)
{   pop(s, y);
printf("%d",y);
}
}

但是你的程序设计本身就有问题,栈结构是由:栈底指针、栈顶指针和栈的最大允许分配的空间的数据结构,你的数据结构定义有问题,应该这样定义:

typedef struct
{
    SElemType *base;//栈底指针
    SElemType *top;//栈顶指针
    int stacksize;//栈的最大容量
}SqStack;

用这个数据结构来重新写一下吧,相信聪明的你一定能做到!

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式