关于用栈算法实现数值转换的一些问题,请教各位
昨天看数据结构课本,结果讲到栈时它举了个用栈算法的例子,就是数值转换,例如将十进制数转换成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);
}
}
传引用调用,我想用传值调用来实现,结果不知道返回值该怎样实现,把自己弄糊涂了,请教各位高手指点迷津,源代码如下:
#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);
}
}
...全文
相关推荐
stack实现进制转换
这不仅加深了对栈的理解,也锻炼了算法设计和实现的能力。总结一下,本文讨论了如何使用Java中的栈数据结构实现进制转换,特别是从十进制到二进制的转换。
数据结构实验报告数值转换和一元多项式.pdf
接着,当栈不为空时,不断弹出栈顶元素并输出,完成转换。这份实验报告详细地阐述了如何利用栈来实现数制转换,展示了如何通过实际编程解决数据结构问题,是学习数据结构和算法的良好示例。
ConsoleApplication3_oppositeqom_十进制到n进制的转换_
通过深入理解栈的数据结构以及其在数值转换中的应用,我们可以有效地实现各种进制之间的转换。此项目为学习和实践这一概念提供了很好的平台。
数据结构与算法数据结构与算法带例题
**罗马数字和阿拉伯数字互译问题**:这需要理解罗马数字的规则,通过映射和减法规则来实现转换。8.
利用栈实现的数值转换的程序
综上所述,利用栈实现数值转换的程序,不仅展示了栈的基本操作和应用,还涉及到了数值转换的算法逻辑,是数据结构学习中的一个重要案例。


