急!急!使用链栈实现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);
}
} 展开
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);
}
} 展开
1个回答
展开全部
我看了一下你的程序,把你的程序调通了,如下:
#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;
用这个数据结构来重新写一下吧,相信聪明的你一定能做到!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询