2.编程序,利用顺序栈或链栈的基本操作(初始化、进栈、出栈及获取栈顶元素)来实现数制转换,并设计主函数来进行调用。
#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 100
#define ERROR 0
#define OK 1
typedef int SElemType;
typedef int Status;
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
//初始化
Status InitStack( SqStack &S )
{
S.base =new SElemType[MAXSIZE];
if( !S.base ) return ERROR;
S.top = S.base;
S.stacksize = MAXSIZE;
return OK;
}
//判断栈是否为空
bool StackEmpty( SqStack S )
{
if(S.top == S.base) return true;
else return false;
}
//进栈
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;
}
//对于任意一个非负十进制数,打印输出与其等值的八进制数
void conversion(int N,int r)
{//对于任意一个非负十进制数,打印输出与其等值的八进制数
SElemType e;
SqStack S;
InitStack(S); //初始化空栈S
while(N) {//当N非零时,循环
Push(S,N%r); //把N与8求余得到的八进制数压入栈S
N=N/r; //N更新为N与8的商
}
while(!StackEmpty(S))//当栈S非空时,循环
{
Pop(S,e); //弹出栈顶元素e
printf("%d",e); //输出e
}
}
void main()
{
int N,r;
printf("请输入十进制:");
scanf("%d",&N);
printf("转换为2或8进制:");
scanf("%d",&r);
conversion( N, r);
}