您的位置:首页 > 理论基础 > 数据结构算法

《数据结构》算法3.8栈实现数制转换

2016-05-15 19:41 423 查看
首先最简单的是实现10进制和2进制的转换

/*
输入一个数,然后输出其对应的8进制的数
*/
#include<stdio.h>
#define MAX 1000//顺序栈存储空间最大值
//int n,m;//n表示输入的数,m表示输出的数的进制

//先定义一个顺序栈的结构
typedef struct{
int *base;//栈底4指针
int *top;//栈顶指针
int stacksize;
}SqStack;

//初始化顺序栈
int InitStack(SqStack &S){
S.base=new int[MAX];
if(!S.base){
return 0;//存储空间分配失败
}
S.top=S.base;
S.stacksize=MAX;
return 1;
}

//判断栈是否为空
int IsEmpty(SqStack &S){
if(S.base==S.top){
return 1;//栈空
}else{
return 0;//栈非空
}
}

//入栈
int Push(SqStack &S,int e){
if(S.top-S.base==S.stacksize){
return 0;//栈满
}
*S.top++=e;
return 1;
}

//出栈
int Pop(SqStack &S,int &e){
if(S.top==S.base){
return 0;//栈空
//printf("栈空\n");
}
e=*--S.top;
return 1;
//printf("%d",e);
}

//数制转换
void conversion(SqStack &S,int n){
//n表示输入的数,m表示输出的数的进制
InitStack(S);
while(n){
Push(S,n%2);
n=n/2;
}

while(!IsEmpty(S)){
int e;
Pop(S,e);
printf("%d",e);
}
}

int main(){

SqStack S;
if(InitStack(S)){
printf("栈S初始化成功!\n");
}else{
printf("栈S初始化失败!\n");
}

if(IsEmpty(S)){
printf("栈为空.\n");
}else{
printf("栈非空.\n");
}

int n;
printf("请输入数n:");
scanf("%d",&n);
conversion(S,n);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: