【数据结构】2.3栈的应用——进制转换

本文代码为学习总结,如果错误敬请指正!感谢各位大佬 😃

历史文章

栈的定义

只允许在一端进行插入或删除操作的线性表

栈的操作特性:后进先出(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=248162
13转换成2进制的结果为:1101

-test2
请输入整数n:13
请输入n要转换的进制d:(d=248164
13转换成4进制的结果为:31

-test3
请输入整数n:13
请输入n要转换的进制d:(d=248168
13转换成8进制的结果为:15


-test4
请输入整数n:17
请输入n要转换的进制d:(d=2481616
17转换成16进制的结果为:11
  • 9
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Selcouther

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值