#pragma warning(disable:4996)
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct //定义栈
{
int data[MAXSIZE];
int top;
}SeqStack, * PSeqStack;
PSeqStack Init_SeqStack();//创建一顺序栈,返回一个指向栈的指针,为零表示分配空间失败
int Empty_SeqStack(PSeqStack S);//判栈空,1-空,0非空
int Push_SeqStack(PSeqStack S, int x);//插入新元素x,1-成功,0-失败
int Pop_SeqStack(PSeqStack S, int* x);//删除栈顶元素,保存在*x,1-成功,0-失败
int GetTop_SeqStack(PSeqStack S, int* x);//取出栈顶元素,用指针带出值 1-成功,0-失败
void DestroySeqStack(PSeqStack *S);//销毁栈
int main()
{
int r=1,x=0,i=0;
PSeqStack S;
S = Init_SeqStack();//初始化栈
printf("********请输入一个十进制数********\n");
scanf("%d", &x);
printf("********请输入想转换的数制********\n");
scanf("%d", &r);
while (x != 0)//数制转换操作
{
Push_SeqStack(S, x % r);
x = x / r;
i++;
}
printf("********进制转换的结果如下********\n");
while (i--)
{
Pop_SeqStack(S, &x);
if (x < 10)
printf("%d", x);
else if (x >= 10)
{
if (x == 10)
printf("A");
if (x == 12)
printf("B");
if (x == 13)
printf("C");
if (x == 14)
printf("D");
if (x == 15)
printf("E");
}
}
DestroySeqStack(&S);//销毁栈
return 0;
}
PSeqStack Init_SeqStack()//创建一顺序栈,返回一个指向栈的指针,为零表示分配空间失败
{
PSeqStack S;
S = (PSeqStack)malloc(sizeof(SeqStack));
if (S)
S->top = -1;
return S;
}
int Empty_SeqStack(PSeqStack S)//判栈空,1-空,0非空
{
if (S->top == -1)
return 1;
else
return 0;
}
int Push_SeqStack(PSeqStack S, int x)//插入新元素x,1-成功,0-失败
{
if (S->top == MAXSIZE - 1)
return 0;
else
{
S->top++;
S->data[S->top] = x;
return 1;
}
}
int Pop_SeqStack(PSeqStack S, int* x)//删除栈顶元素,保存在*x,1-成功,0-失败
{
if (Empty_SeqStack(S))//规避栈空
return 0;
else
{
*x = S->data[S->top];
S->top--;
return 1;
}
}
int GetTop_SeqStack(PSeqStack S, int* x)//取出栈顶元素,用指针带出值 1-成功,0-失败
{
if (Empty_SeqStack(S))//规避栈空
return 0;
else
*x = S->data[S->top];
return 1;
}
void DestroySeqStack(PSeqStack* S)//销毁栈
{
if (*S)
free(*S);
*S = NULL;
return;
}