将十进制数N和其他d进制数之间进行转换是计算机实现计算的基本问题,解决方案很多,其中最简单的方法是除d取余法。例如,(1348)10=(2504)8,其转化过程如下所示:
N N div 8 N mod 8
1348 168 4
168 21 0
21 2 5
2 0 2
从中可以看出,最先产生的余数4是转换结果的最低位,这正好符合栈的“后进先出”的特性。所以可以用顺序栈来模拟这个过程。
下面给出代码实现
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int ElemType;
typedef struct
{
ElemType *base; //基指针
ElemType *top; //栈顶指针
int stacksize; //当前空间
}SqStack;
int InitStack(SqStack &s) //栈的初始化
{
s.base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if(!s.base) return 0;
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return 1;
}
int Push(SqStack &s,ElemType e) //栈的插入
{
if(s.top-s.base>=s.stacksize)
{
s.base=(ElemType *)realloc(s.base,(s.stacksize+STACKINCREMENT)*