C语言实现任意栈之间的进制转换

这篇具有很好参考价值的文章主要介绍了C语言实现任意栈之间的进制转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目:

        利用栈,将十进制数字N转换为D进制(D=2,8,16),其中16进制对应的符号是0~9,A~F。

        要求:十进制数字和N进制从键盘输入获得,从屏幕显示进制转换后的数字。

代码:

#include <stdio.h>
#define StackSize 100
#define true 1
#define false 0
typedef int DataType;

typedef struct{
	DataType data[StackSize];
	int top;
}SeqStack; 

typedef struct Node{
	DataType data;
	struct Node *next;
}*LinkStack;

//顺序栈初始化 
void InitStack(SeqStack &S){
	S.top=-1;
} 

//判断顺序栈是否满
int StackEmpty(SeqStack &S){
	if(S.top==-1){
		return true;
	}else{
		return false;
	}
} 

//顺序栈进栈
int Push(SeqStack &S,DataType x){
	if(S.top==StackSize-1){
		return false;
	}else{
		S.top++;
		S.data[S.top]=x;
		return true; 
	}
} 

//顺序栈出栈
int Pop(SeqStack &S,DataType &x){
	if(S.top==-1){
		return false;
	}else{
		x=S.data[S.top];
		S.top--;
		return true;
	}
} 

//顺序栈进制转换
void Conversion(){
	int N,D,e;
	SeqStack S;
	InitStack(S);
	printf("请输入要转换的十进制数字是:");
	scanf("%d",&N);
	printf("请输入要转换的进制是(2-9及16):");
	scanf("%d",&D); 
	int num=N;
	while(N){
		Push(S,N%D);
		N=N/D;	
	}
	while(!StackEmpty(S)){
		Pop(S,e);
		if(e>9){
			//十六进制 
			printf("%c",e+55);
		}else{
			printf("%d",e);
		}		
	}
	printf("\n"); 
} 

//链式栈是否为空栈 
int Empty2(LinkStack top){
	if(top==NULL){
		return true;
	}
	return false;
} 

//链式栈进栈
int Push2(LinkStack *top,DataType x){
	LinkStack s;
	s=new Node;
	if(s==NULL){
		return false;
	}else{
		s->data=x;
		s->next=(*top);
		(*top)=s;
		return true;
	}
} 

//链式栈出栈 
int Pop2(LinkStack *top,DataType *x){
	if(top!=NULL){
		LinkStack p=(*top);
		(*x)=(*top)->data;
		(*top)=(*top)->next;
		delete(p);
	}
	return false;
} 
 
int main(){
	
	while(1){
		printf("请选择所需功能:\n");
		printf("1、使用链栈转换\n");
		printf("2、使用顺序栈转换\n");
		printf("3、退出程序\n\n");
		int number;
		scanf("%d",&number); 
		if(number==1){
			Conversion2();
		}else if(number==2){
			Conversion();
		}else if(number==3){
			break;
		}else{
			printf("输入有误!\n");
		}
	}
	return 0;
} 

效果图:

C语言实现任意栈之间的进制转换,C语言,数据结构,c语言,c++文章来源地址https://www.toymoban.com/news/detail-736785.html

到了这里,关于C语言实现任意栈之间的进制转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包