本文代码为学习总结,如果错误敬请指正!感谢各位大佬 😃
历史文章
栈的定义
只允许在一端进行插入或删除操作的线性表
栈的操作特性:后进先出(LIFO)
进制转换
void conversion(int n,int d){
LinkStack S;
ElemType k,e;
int m=n;//m即为十进制数n
InitStack(S);
while(m>0){//求出所有余数,进栈
k=m%d;
Push(S,k);
m=m/d;
}
printf("%d转换成%d进制的结果为:",n,d);
while(S!=NULL){
Pop(S,e);
printf("%1d",e);
}
}
完整代码及运行结果
代码
#include<stdlib.h>
#include<stdio.h>
typedef int ElemType;
typedef struct SNode{
ElemType data;//存放栈中元素
struct SNode *next;//指针域
}SNode,*LinkStack;
//初始化
bool InitStack(LinkStack &S){
S=NULL;//不带头结点
return true;
}
//进栈
bool Push(LinkStack &S,ElemType x){
SNode *p=(LinkStack)malloc(sizeof(SNode));//新建结点
p->data=x;
p->next=S;
S=p;
return true;
}
//出栈
bool Pop(LinkStack &S,ElemType &x){
SNode *p=(LinkStack)malloc(sizeof(SNode));//新建结点
if(S==NULL){//栈空
return false;
}
x=S->data;
p=S;
S=S->next;
delete p;
return true;
}
void conversion(int n,int d){
LinkStack S;
ElemType k,e;
int m=n;//m即为十进制数n
InitStack(S);
while(m>0){//求出所有余数,进栈
k=m%d;
Push(S,k);
m=m/d;
}
printf("%d转换成%d进制的结果为:",n,d);
while(S!=NULL){
Pop(S,e);
printf("%1d",e);
}
}
int main(){
int n,d;
printf("请输入整数n:");
scanf("%d",&n);
printf("请输入n要转换的进制d:(d=2、4、8、16)");
scanf("%d",&d);
conversion(n,d);//进制转换
}
运行结果
-test1
请输入整数n:13
请输入n要转换的进制d:(d=2、4、8、16)2
13转换成2进制的结果为:1101
-test2
请输入整数n:13
请输入n要转换的进制d:(d=2、4、8、16)4
13转换成4进制的结果为:31
-test3
请输入整数n:13
请输入n要转换的进制d:(d=2、4、8、16)8
13转换成8进制的结果为:15
-test4
请输入整数n:17
请输入n要转换的进制d:(d=2、4、8、16)16
17转换成16进制的结果为:11