https://www.cnblogs.com/longhai3/longhai

数据结构>>栈十转化二八十六

Posted on 2022-02-12 22:27  凡是过去,皆为序曲  阅读(34)  评论(0编辑  收藏  举报

#include<stdlib.h>
#include<stdio.h>
#define MAXSIZE 5 // 存储空间初始分配量
#define INCREMENT 5
typedef char elemType;
typedef struct {
elemType *top; // 栈顶指针
elemType *base; // 栈底指针
int stacksize; // 栈空间大小
} SeqStack;
SeqStack s;//s是栈这种类型的一个结构体变量

//初始化
void initStack(SeqStack &s) {
s.base=(elemType *)malloc(sizeof(elemType)*MAXSIZE);
if(!s.base)
exit(0); // 存储分配失败
s.top=s.base;
s.stacksize=MAXSIZE;
}

//进栈
void push(SeqStack &s, elemType x) {
if(s.top-s.base==s.stacksize) {
s.base=(elemType *)realloc(s.base,sizeof(elemType)*(MAXSIZE+INCREMENT));
s.stacksize+=INCREMENT;
}
*(s.top++)=x;
}

//出栈
void pop(SeqStack &s,elemType &x)
//出栈,相当于删除操作,注意x前别名符号&的用法
{
if(s.top==s.base)
printf("栈空,没有数据可以输出! \n");
else
{
s.top--;
x=*s.top;
}
//printf( "%c", *s. top);
}

//int main() {
// initStack(s);
// int n,i,m;
// printf("输入十进制数:");
// scanf("%d",&n);
// printf("输入转换的进制数(2/8/16):");
// scanf("%d",&m);
// if(m==2) {
// while(n>1) {
// i=n%2;
// n=n/2;
// push(s,i);
// }
// push(s,n);
// printf("二进制数:");
// pop(s);
// } else if(m==8) {
// while(n>7) {
// i=n%8;
// n=n/8;
// push(s,i);
// }
// push(s,n);
// printf("八进制数:");
// pop(s);
// } else if(m==16) {
// while(n>15) {
// i=n%16;
// n=n/16;
// push(s,i);
// }
// push(s,n);
// while(s.top>s.base) {
// s.top--;
// char sum;
// if(*s.top>9) {
// switch(*s.top) {
// case 10:sum ='A';break;
// case 11:sum ='B';break;
// case 12:sum ='C';break;
// case 13:sum ='D';break;
// case 14:sum ='E';break;
// case 15:sum ='F';break;
// }
// printf("%c",sum);
// } else {
// printf("%d",*s.top);
// }
// }
// }
// return 0;
//}

//void zhuanhuan00(int a,int R) { //进 制转换的算法
// int t;
// while(a) {
// t=a%R;
// if(t>=10&&t<=15)
// push(s,t+'A'-10);
// else
// push(s,t+'0');
// a=a/R;
// }
//}

void zhuanhuan(int a,int R) //进制转换, 增加出栈操作,增加初始化
{
int r;
elemType x;
initStack(s); //初始化栈
while(a)
{
r=a%R;
if(r>=0&&r<=9)
push(s,r+'0');
else
push(s,r+'a'-10);
a=a/R;
}
while(s.top>s.base) {
pop(s,x);
printf("%c",x);
}
}
int main()
{
initStack(s);
int a,R;
char x;
scanf("%d" ,&a);//10进制
printf("请输入要转换的进制: 2进制or8进制or16进制: \n");
scanf("%d",&R);
zhuanhuan(a,R);
pop(s,x);
}

随心,随记

https://www.cnblogs.com/w1hg/331817