关于用栈算法实现数值转换的一些问题,请教各位

fengyoujing fengyoujing 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
昨天看数据结构课本,结果讲到栈时它举了个用栈算法的例子,就是数值转换,例如将十进制数转换成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);
}

}
...全文

相关推荐

评论 8
收藏 已收藏
分享
返回顶部
fengyoujing
C语言 70,039 成员 243,237 内容