//题目描述:(数制转换)将十进制数n转换为k进制数并输出(2<=k<=10),输入为两个整数n、k。
//顺序栈
#include <stdio.h>
#include <stdlib.h>
#define STACK_INT_SIZE 20 //存储空间初始分配量
#define STACKINCREMENT 5 //存储空间分配增量
typedef int SElemType;
typedef struct node
{
SElemType *base;
SElemType *top;
int stacksize;//当前分配的存储容量
}SqStack;
void InitStack(SqStack &S) //建栈初始化
{
S.base=(SElemType *)malloc(STACK_INT_SIZE*sizeof(SElemType));//开辟空间,初始化操作
if(!S.base) exit(0);
S.top=S.base;
S.stacksize=STACK_INT_SIZE;
}
void push(SqStack &S,SElemType e) //进栈
{
if(S.top-S.base>=STACK_INT_SIZE)
{
S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base) exit(0);
S.top=S.base+STACK_INT_SIZE;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
}
void pop(SqStack &S,SElemType &e) //出栈
{
if(S.top==S.base) exit(0);
e=*--S.top;
}
int StackEmpty(SqStack &S) //判断栈是否为空栈
{
if(S.base==S.top)
return 1;
else
return 0;
}
void ClearStack(SqStack &S) //销毁栈
{
S.base=S.top=NULL;
S.stacksize=0;
}
int main()
{
int n,k,e;
SqStack S;
while(1)
{
InitStack(S);
printf("十进制整数:");
scanf("%d",&n);
printf("需要转换成的进制:");
scanf("%d",&k);
while(n)
{
push(S,n%k);
n/=k;
}
while(!StackEmpty(S))
{
pop(S,e);
printf("%d",e);
}
printf("\n");
ClearStack(S);
system("pause");
system("cls");
}
return 0;
}
栈——数制转换
最新推荐文章于 2021-11-21 22:38:11 发布