栈的应用——数制转换

来源:互联网 发布:matlab 无约束最优化 编辑:程序博客网 时间:2024/06/05 05:08
#include<stdio.h>
#include<stdlib.h>
#include<process.h>
#define TRUE 1
#define FLASE 0
#define OK 1
#define ERROR 0
#define NULL 0
#define OVERFLOW -1
#define stack_init_size 100
#define stackincrement 10
typedef int status;
typedef int SElemType;
typedef struct LNode{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack,*LinkStack;
status InitStack(SqStack &s)
{//初始化建栈 
s.base=(SElemType *)malloc(stack_init_size*sizeof(SElemType));
if(!s.base) return ERROR;
s.top=s.base;
s.stacksize=stack_init_size;
return OK;
}
status Push(SqStack &s,SElemType e)
{//将元素e压入栈中 
if(s.top-s.base>=s.stacksize)//栈满,追加存储空间
{
s.base=(SElemType*)realloc(s.base,(stack_init_size+stackincrement)*sizeof(SElemType));
if(!s.base) exit(OVERFLOW);
s.top=s.base+s.stacksize;
s.stacksize+=stackincrement;
}
*s.top++=e;
return OK;
}
status Pop(SqStack &s,SElemType &e)
{//讲栈顶元素取出并赋值给e 
if(s.base==s.top)//若栈不空
return ERROR;
e=*--s.top;
return OK;
}
void conversion()
{//数制转换函数 
    SqStack s;
    SElemType e;
int N,n;
InitStack(s);
printf("请输入一个十进制的数N和想要转换的进制n:");
scanf("%d %d",&N,&n);
if(n==16)
{
while(N)
{
if((N%n)>9)
{
Push(s,N%n+55);
N=N/n;
}
else {
Push(s,N%n);
N=N/n;

}
while(s.base!=s.top)
{
Pop(s,e);
if(e>9)
printf("%c",e);
else printf("%d",e); 
}
printf("\n");
}
else {
while(N)
{
Push(s,N%n);
N=N/n;
}
while(s.base!=s.top)
{
Pop(s,e);
printf("%d",e);
}
printf("\n");
}
}
int main()
{
conversion();
return 0; 
}