求大伙儿指点一下
求大家指点一下
# include<stdio.h>
# define sizemax 100
typedef int elemtype ;
typedef struct
{
elemtype data[sizemax];
int top;
}seqstack;
void intistack(seqstack *p)
{
p->top=-1;
}
elemtype IsEmpty(seqstack *p)
{
return p->top==-1;
}
void push(seqstack *p,elemtype e)
{
if(!IsEmpty(p))
p->data[++p->top]=e;
// printf("%d",p->data[p->top]);
}
elemtype pop(seqstack *p)
{
if(IsEmpty(p))
{
printf("栈已空\n");
return -1;
}
return p->data[p->top--];
}
void output(seqstack *p)
{
while(!IsEmpty(p))
printf("%d",pop(p));
}
void main()
{
int i,n;
seqstack p;
intistack(&p);
printf("任意输入一个十进制数:");
scanf("%d",&i);
printf("任意输入一个你要转换的进制:");
scanf("%d",&n);
while(i)
{
push(&p,i%n);
i=i/n;
}
output(&p);
}
运行结果没有,好像是进栈哪里出错了,我加了个printf时候,输出的值就有问题,不知道哪里出错了
------解决方案--------------------
语义错误,我给你改好然后重新排版了一下
问题在于 push 方法。你原先的写法是:如果栈不是空的,那么向栈中压入一个数据。
因为栈的初始状态是空,所以你永远不会向栈中添加任何数据。把这个判断删掉就好了。
------解决方案--------------------
++
# include<stdio.h>
# define sizemax 100
typedef int elemtype ;
typedef struct
{
elemtype data[sizemax];
int top;
}seqstack;
void intistack(seqstack *p)
{
p->top=-1;
}
elemtype IsEmpty(seqstack *p)
{
return p->top==-1;
}
void push(seqstack *p,elemtype e)
{
if(!IsEmpty(p))
p->data[++p->top]=e;
// printf("%d",p->data[p->top]);
}
elemtype pop(seqstack *p)
{
if(IsEmpty(p))
{
printf("栈已空\n");
return -1;
}
return p->data[p->top--];
}
void output(seqstack *p)
{
while(!IsEmpty(p))
printf("%d",pop(p));
}
void main()
{
int i,n;
seqstack p;
intistack(&p);
printf("任意输入一个十进制数:");
scanf("%d",&i);
printf("任意输入一个你要转换的进制:");
scanf("%d",&n);
while(i)
{
push(&p,i%n);
i=i/n;
}
output(&p);
}
运行结果没有,好像是进栈哪里出错了,我加了个printf时候,输出的值就有问题,不知道哪里出错了
------解决方案--------------------
语义错误,我给你改好然后重新排版了一下
问题在于 push 方法。你原先的写法是:如果栈不是空的,那么向栈中压入一个数据。
因为栈的初始状态是空,所以你永远不会向栈中添加任何数据。把这个判断删掉就好了。
#include<stdio.h>
#define sizemax 100
typedef int elemtype;
typedef struct
{
elemtype data[sizemax];
int top;
} seqstack;
void intistack(seqstack *p)
{
p->top = -1;
}
elemtype IsEmpty(seqstack *p)
{
return p->top == -1;
}
void push(seqstack *p, elemtype e)
{
p->data[++p->top] = e;
}
elemtype pop(seqstack *p)
{
if(IsEmpty(p))
{
printf("栈已空\n");
return -1;
}
return p->data[p->top--];
}
void output(seqstack *p)
{
while(!IsEmpty(p))
printf("%d", pop(p));
}
void main()
{
int i,n;
seqstack p;
intistack(&p);
printf("任意输入一个十进制数:");
scanf("%d", &i);
printf("任意输入一个你要转换的进制:");
scanf("%d", &n);
while(i)
{
push(&p, i % n);
i = i / n;
}
output(&p);
}
------解决方案--------------------
++