数据结构c/c++栈的应用—数值转换
数制转换的过程:① 初始化一个空栈S。
② 当十进制数N非零时,循环执行以下操作:把N与r求余得到的r进制数压入栈S;N更新为N与r的商。
③ 当栈S非空时,循环执行以下操作:弹出栈顶元素e;输出e。
头文件为:
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
typedef struct //定义一个栈
{
SElemType *base; //栈顶
SElemType *top; //栈底
int stacksize; //栈的长度
}Sqstack;
Status Initstack(Sqstack &S) //顺序栈的初始化
{
S.base=new SElemType[MAXSIZE]; //栈的基地址
if(!S.base) exit(OVERFLOW);
S.top=S.base;
S.stacksize=MAXSIZE;
return OK;
}
Status emptystack(Sqstack S) //空栈
{
if(S.top==S.base)
return 1;
else return 0;
}
Status push(Sqstack &S,SElemType e) //入栈
{
if(S.top-S.base==S.stacksize) return ERROR;
*S.top++=e;
return OK;
}
Status Pop(Sqstack &S,SElemType &e) //出站
{
if(S.top==S.base)
return ERROR;
e=*--S.top;
return OK;
}
SElemType GetTop(Sqstack S,SElemType &e) //取栈顶元素
{
if(S.top==S.base)
return ERROR;
e=*(S.top-1);
return OK;
}
主程序为:
#include<stdio.h>
typedef int Status; //声明Status的类型为int
typedef int SElemType; //声明SElemType的类型为int
#include"Sqstack.h" //调用头文件
void creak(int N,int R) // 数值转换过程
{ Sqstack S;
Initstack(S);
int e;
while(N) //不固定循环次数用while
{
push(S,N%R);
N=N/R;
}
while(!emptystack(S)){
Pop(S,e);
printf("%d\t",e);
printf("%d",e);
}
}
int main()
{
int N,R;
printf("请输入你要转换的数");
scanf("%d",&N);
printf("请输入你要转换的进制");
scanf("%d",&R);
creak(N,R);
return 0;
}
结果演示