数制转换,将10进制转换为8进制 C语言 栈的应用
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
typedef int ElemType;
typedef int Status;
#define STACK_SIZE 10
#define STACK_INCREMENT 10
#define OK 1
#define ERROR -1
typedef struct{
ElemType *base;
ElemType *top;
int stacksize;
}Stack;
Status InitStack(Stack &S)
{
S.base=(ElemType*)malloc(STACK_SIZE*sizeof(ElemType));
if (!S.base)
return ERROR;
S.top=S.base;
S.stacksize=STACK_SIZE;
return OK;
}
Status Pop(Stack &S,ElemType &e)
{
if (S.base==S.top)//判断是否非空
return ERROR;
S.top--;//栈顶元素降低
e=*S.top;//输出
return OK;
}
Status Push(Stack &S,ElemType e)
{
if ((S.top-S.base)>=S.stacksize)//栈满追加数据元素
{
S.base=(ElemType *)realloc(S.base,(S.stacksize+STACK_INCREMENT)*sizeof(ElemType));
if (!S.base)
exit(ERROR);
S.top=S.base+S.stacksize;
S.stacksize+=STACK_INCREMENT;
}
*S.top=e;
S.top++;
return OK;
}
Status StackEmpty(Stack &S)
{
if (S.base==S.top)
return 1;
else
return 0;
}
void conversion()
{
ElemType e,N;
Stack S;
InitStack(S);
printf("请输入十进制整数:\n");
scanf("%d",&N);
while(N)
{
Push(S,N%8);
N=N/8;
}
printf("相应的八进制整数为:\n");
while(!StackEmpty(S))
{
Pop(S,e);
printf("%d",e);
}
}
void main()
{
//ElemType e;
//Stack S;
//InitStack(S);
//printf("输入有关元素:\n");
//scanf("%d",&e);
//Push(S,e);
//Pop(S,e);
//printf("%d",e);
conversion();
getch();
}