您的位置:首页 > 其它

用栈的思想实现数制转换(十进制->八进制)

2016-08-11 07:15 225 查看
十进制和其他d进制数的转换是计算机实现计算的基本问题,其中一个简单算法基于下列原理:

N=(N div d)*d+N mod d(div 为整除运算,mod为求余运算)

下列代码用栈的思想(先进后出)实现数制转换,不足之处是:

仅仅是用代码实现功能;

代码没有优化;

中间“注释”太多。

参考代码:

#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define NO 0
#define ADD_SIZE 20
#define INIT_SIZE 10
typedef int Status;
typedef struct /*类型定义,定义了一个SqStack类型,可以用它来定义一个变量*/
{
int *top;
int *base;
int stacksize;
}SqStack;
Status InitStack(SqStack *S)
{   /*分配内存,如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。*/
S->base=(int *)malloc(INIT_SIZE*sizeof(int));
if(!S->base)
printf("ERROR!\n");
S->top=S->base;
S->stacksize=INIT_SIZE;
return OK;
}
Status Push(SqStack *S,int e)
{
if(S->top-S->base>=S->stacksize)/*两个指针的差是中间元素的个数*/
{
S->base=(int *)malloc((INIT_SIZE+ADD_SIZE)*sizeof(int));
if(!S->base)
printf("ERROR!\n");
S->top=S->base+S->stacksize;
S->stacksize+=ADD_SIZE;
}
*S->top++=e;//先把e给当前指针所指的位置,然后指针+1
return OK;
}
Status Pop(SqStack *S)//直接在原结构体上操作
{
int e;
e=*--S->top;//指针先减1,再把它的值赋给e
return e;
}
int main()
{
int N;//输入
int m;//N%8  m先入栈,最后出栈
int out_stack_value;
SqStack S;
InitStack(&S);
scanf("%d",&N);
while(N!=0)
{
m=N%8;//余数,进栈
Push(&S,m);
N=N/8;
}
while(S.top-S.base>0)
{
out_stack_value=Pop(&S);//出栈值
printf("%d",out_stack_value);//传递的是原结构体的地址
}
printf("\n");
return 0;
}


运行输出:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数制转换