关于用栈算法实现数值转换的一些问题,请教各位
昨天看数据结构课本,结果讲到栈时它举了个用栈算法的例子,就是数值转换,例如将十进制数转换成8进制数,书上给出了类c的算法,我参考这用c写了个程序,书上函数用的是
传引用调用,我想用传值调用来实现,结果不知道返回值该怎样实现,把自己弄糊涂了,请教各位高手指点迷津,源代码如下:
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREAMENT 10
typedef struct
{
int *base;
int *top;
int stacksize;
} SqStack;
void InitStack(SqStack);
int StackEmpty(SqStack);
int Push(SqStack,int);
int Pop(SqStack,int);
void InitStack(SqStack s)
{
s.base=(int *)malloc((STACK_INIT_SIZE)*sizeof(int));
if(!s.base) exit(0);
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
}
int StackEmpty(SqStack s)
{
if(s.top==s.base)
return 1;
else
return 0;
}
int Push(SqStack s,int e)
{
if(s.top-s.base>=s.stacksize)
{
s.base=(int*)realloc(s.base,(s.stacksize+STACKINCREAMENT)*sizeof(int));
if(!s.base) exit(0);
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREAMENT;
}
*s.top++=e;
return s.top;
}
int Pop(SqStack s,int e)
{
if(s.top==s.base) return 0;
e=*--s.top;
return s.top;
}
void main()
{
SqStack s;
int e,N;
InitStack(s);
scanf("%d",N);
while(N)
{
Push(s,N%8);
N=N/8;
}
while(!StackEmpty(s))
{
Pop(s,e);
printf("%d\n",e);
}
}