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

2025-04-08 13:02:40
推荐回答(1个)
回答1:

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

#include 
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;

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