当前位置: 代码迷 >> C语言 >> 我的错误是?(栈实现进制的转换)(我个人意见是没错但是结果却不一样,根据输出 ...
  详细解决方案

我的错误是?(栈实现进制的转换)(我个人意见是没错但是结果却不一样,根据输出 ...

热度:257   发布时间:2007-10-20 20:48:55.0
我的错误是?(栈实现进制的转换)(我个人意见是没错但是结果却不一样,根据输出的结果

/**********************************/
//3-1define.h
#ifndef _MYDEFINEFILE_H
#define _MYDEFINEFILE_H

#define INITSIZE 100
#define ADDSIZE 10
typedef int elemtype;
typedef struct
{
int top;
elemtype *base;
int stacksize;
}sqstack;
#endif
/***************************/
//3-1lib.h
#include<stdio.h>
#include<malloc.h>
#include"3-1define.h"
void initstack(sqstack *s)
{
s->base=(elemtype *)malloc(INITSIZE*sizeof(elemtype));
s->top=0;
s->stacksize=INITSIZE;
printf("OK ,CREATDE!\n");
}
int getlen(sqstack *s)
{
return s->top;
}
int gettop(sqstack *s)
{
if(s->top<=0)
return 0;
else
return 1;
}
int push(sqstack *s,elemtype x)
{
if(s->top>=s->stacksize)
{s->base=(elemtype*)malloc(sizeof(elemtype)*(INITSIZE+ADDSIZE));
if(!s->base)
return 0;
s->stacksize=INITSIZE+ADDSIZE;

}

s->base[s->top++]=x;
return 1;
}
int pop(sqstack *s)
{
if(s->top==0)
return 0;
else
return s->base[s->top--];


}
int stackempty(sqstack *s)
{
if(s->top==0)
return 1;
else
return 0;
}
void list(sqstack *s)
{
int i;
for(i=s->top-1;i>=0;i--)
printf("%4d",s->base[i]);
printf("\n");
}
/****************************/
//3-1-1main.h

#include<stdio.h>
#include"3-1define.h"
#include"3-1lib.h"

void conversion()
{
int N,M;
elemtype e=0;
sqstack *s=(sqstack *)malloc(sizeof(sqstack));
printf("Input the number you want :\n");
scanf("%d",&N);
printf("Input the number you want to convert into :\n");
printf("1,two\n 2,eight\n 3,ten\n 4,sixteen\n");
scanf("%d",&M);

initstack(s);
while(N)
{
push(s,N%M);
N=N/M;
}
while(!stackempty(s))
{
e=pop(s);
printf("%d",e);
}
}
void main()
{



conversion();


}



搜索更多相关的解决方案: 进制  意见  结果  输出  

----------------解决方案--------------------------------------------------------

还好,我自己解决了,要不这就是一个历史了


----------------解决方案--------------------------------------------------------

问题在哪里啊??我正在看呢,,好像是pop()返回的有问题
还有就是你的程序,有一个小问题,就是判断栈满之后,应该用realloc()函数来分配新的空间,不然你用malloc,就把原来栈里的东西给丢失了了。
还有判断栈是否为满,就是push函数中,if()语句有一个问题,错把等于号写成赋值号了;
还有给你一个建议,在主函数中,你没有必要把栈定义成指针类型,直接定义栈类型变量即可,只要把一些函数里改成饮用,也没有必要在为栈本身分配空间。。。。
不过,我最想知道,问题到底是什么,,pop()返回的好像有问题~~


----------------解决方案--------------------------------------------------------
哦,谢谢等哦!
原因在于:
兰色部分:
int push(sqstack *s,elemtype x)
{
if(s->top>=s->stacksize)
{s->base=(elemtype*)malloc(sizeof(elemtype)*(INITSIZE+ADDSIZE));
if(!s->base)
return 0;
s->stacksize=INITSIZE+ADDSIZE;

}

s->base[s->top++]=x;
return 1;
}
int pop(sqstack *s)
{
if(s->top==0)
return 0;
else
return s->base[s->top--];
应该变为return s->base[--s->top];
要考虑x--与--x的区别了


----------------解决方案--------------------------------------------------------

谢谢你的建议


----------------解决方案--------------------------------------------------------

呵呵 ,原来这样啊,难怪返回乱吗。。。忘记了,那个指针(数组)应该从0开始算起的!!呵呵


----------------解决方案--------------------------------------------------------

你在上面提到:
还有给你一个建议,在主函数中,你没有必要把栈定义成指针类型,直接定义栈类型变量即可,只要把一些函数里改成饮用,也没有必要在为栈本身分配空间。。。。
对,是应该这样,不过用了指针类型就必须开辟空间


----------------解决方案--------------------------------------------------------
  相关解决方案