数据结构实验报告 栈进制转换
数据结构试验报告
栈的应用——进制转换程序
3.出栈程序
int Pop(Stack *s , int *e)
{
if(s->top == s->base)
{
return ERROR;
}
*e = * -- s->top;
return OK;
}
4.主函数与进制转化
void main()
{
int N;
int a;
int e;
Stack s;
InitStack(&s);
Pop(&s , &e);
Push(&s ,&e);
InitStack(&s);
printf("请输入十进制数:");
scanf("%d",&N);
printf("要将N转化为几进制?");
scanf("%d",&a);
while(N)
{
e=N%a;
Push( &s , &e );
N = N / a ;
}
while(s.base!=s.top)
{
Pop(&s ,&e);
printf("%d",e);
}
free(s.base);
system("pause");
}
3.源程序
#include
#include
#include
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define TRUE 1
#define FALSE -1
typedefstruct{
int *base;
int *top;
intstacksize;
}Stack;
intInitStack(Stack *s)
{
s->base=(int *)malloc(STACK_INIT_SIZE * sizeof(int));
if(!s->base)
{
exit(OVERFLOW);
}
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
return OK;
}
int Push(Stack *s , int *e)
{
if(s->top - s->base >= STACK_INIT_SIZE)
{
s->base=(int *)realloc(s->base , (s->stacksize + STACKINCREMENT) * sizeof(int) );
if(!s->base)
{
exit(OVERFLOW);
}
s->top=s->base + STACKINCREMENT;
}
* s->top ++ = *e;
return OK;
}
int Pop(Stack *s , int *e)
if(s->top == s->base)
{
return ERROR;
}
*e = * -- s->top;
return OK;
}
void main()
{
int N;
int a;
int e;
Stack s;
InitStack(&s);
Pop(&s , &e);
Push(&s ,&e);
InitStack(&s);
printf("请输入十进制数:");
scanf("%d",&N);
printf("要将N转化为几进制?");
scanf("%d",&a);
while(N)
{
e=N%a;
Push( &s , &e );
N = N / a ;
}
while(s.base!=s.top)
{
Pop(&s ,&e);
printf("%d",e);
}
free(s.base);
system("pause");
}