#define MAXSIZE 100 //定义栈的最大容量
#define OK 1 //定义状态代码
#define ERROR 0 //定义状态代码
#define OVERFLOW -1 //定义状态代码
typedef int SElemType; //定义栈里面的元素数据类型
typedef int Status;
#include //包含输入输出函数头文件
#include <stdlib.h>
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; //top初始为base, 空栈
S.stacksize=MAXSIZE; //设置栈的容量
return OK;
}
int StackEmpty( 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; //元素e压入栈顶,栈顶指针加1
return OK;
}
Status Pop( SqStack &S, SElemType &e) //出栈函数
{
if(S.top==S.base) //栈空
return ERROR;
e=--S.top; //栈顶指针减1,将栈顶元素赋给e
return OK;
}
void conversion(int N) //十进制转换为八进制
{
SqStack S;
SElemType e;
InitStack(S); //调用栈初始化函数,初始化一个空栈
printf('%d 转换为八进制数为:',N);
while(N)
{
Push(S,N%8); //将N除以8的余数进栈
N=N/8; //将N更新为N除以8的商
}
while(!StackEmpty(S))
{
Pop(S,e);
printf('%d',e);
}
printf('
');
}
void main()
{
int n;
printf('请输入你要转换的十进制整数:');
scanf('%d',&n);
conversion(n);
}