数据结构-栈篇----应用:进制转换(c语言版)

来源:互联网 发布:种族歧视 知乎 编辑:程序博客网 时间:2024/06/07 03:00
#include<stdio.h>
#define MAXSIZE 100 //空间大小
typedef struct   //结构体定义栈的栈顶,栈尾和栈的空间大小
{
int *base;
int *top;
int stacksize;
}SqStack;
bool InitStack(SqStack &S)  //定义一个栈
{
S.base = new int[MAXSIZE];   //为栈开辟空间大小为MAXSIZE的栈
if (!S.base)
return false;
S.top = S.base;
S.stacksize = MAXSIZE;
return true;
}
bool StackEmpty(SqStack S)   //判定栈是否为空
{
if (S.top == S.base)
return true;
else
return false;
}
int StackLength(SqStack S)   //输出栈的实际长度
{
return S.top - S.base;
}
bool Push(SqStack &S,int e)  //入栈操作
{
if ((S.top - S.base) == S.stacksize)
return false;
*S.top++ = e;
return true;
}
bool Pop(SqStack &S, int &e)  //出栈操作
{
if (S.top == S.base)
return false;
e = *(--S.top);
return true;

int main(){     //主函数
SqStack q;    //定义类型为SqStack的栈
int n, k,p;      // 定义所需变量
char num[] = "0123456789ABCDEF";  //此字符数组主要是考虑了十六进制的输出情况
printf("请输入需要转换为多少进制(包括二进制,八进制,十六进制):");
scanf_s("%d", &p);
InitStack(q);    //为栈开辟空间
printf("请输入一个十进制整数:");
scanf_s("%d", &n);
while (n){ 
Push(q, n % p);  //把不同进制求出的余数存入栈
n = n / p;    //把除数结果当成下一次求余的数
}
while (!StackEmpty(q)){
Pop(q, k);
printf("%c", num[k]);   //循环输出
}
return 0;
}
原创粉丝点击