C++ 链栈实现10进制转换为2、8、16进制

C++ 链栈实现10进制转换为2、8、16进制,第1张

代码实现

        (程序中已详细注释,这里不再重复说明,有疑惑可留意哦)

//导入头文件
#include
#include
#include
using namespace std;//声明命名空间

//链栈
typedef struct stacknode{
	int data;//数据域
	struct stacknode *next;//指针域
}stacknode,*LinkStack;


//初始化栈,创建一个空栈 
void initLinkStack(LinkStack &L){
	L=NULL;//空链站 
} 

//判断栈是否为空
int emptyLinkStack(LinkStack L){
	if(L==NULL){
		return 0;
	}else{
		return 1;
	}
}

//入栈 
void pushLinkStack(LinkStack &L,int e){
	LinkStack p;
	p=(LinkStack)malloc(sizeof(stacknode));

	p->data=e;
	p->next=L;
	L=p;
}

//出栈 
void popLinkStack(LinkStack &L,int &e){	
	LinkStack p;
	p=L;
	e=L->data;//取出栈顶元素给e
	L=L->next;
	delete(p);
}

//十进制转2、8、16进制,采用除基倒取余法
void numberConversionL(int oNumber,int cvNumber){
	LinkStack L; //创建栈 
	int x;
	initLinkStack(L); //初始化栈 
	while(oNumber){ 
		x=oNumber%cvNumber;
		pushLinkStack(L,x);//余数入栈
		oNumber=oNumber/cvNumber;
	}
	//余数出栈  
	while(emptyLinkStack(L)){   
		popLinkStack(L,x);
		switch(x){
			case 0: case 1: case 2: case 3:
			case 4: case 5: case 6: case 7:
			case 8: case 9:cout<>choose;
	while(choose!=2){
		switch(choose){
			case 1:{
				cout<<"请输入要转换的十进制数:"<>oNumberL;
				cout<<"请输入要转换至的进制,仅限输入2、8以及16:"<>cvNumberL;
				numberConversionL(oNumberL,cvNumberL);
				break;
			}
			default:
				cout<<"\n!!!您的选择不正确,请重新选择!!!\n";
		}
		cout<>choose;	
	}
    return 0;
} 

运行结果

 

写在最后:

        链栈、顺序栈实现进制转换原理相同,区别在于顺序栈、链栈的自身结构不同,如果想进一步了解顺序栈转换,请看文章:

“C++-顺序栈实现10进制转换为2、8、16进制(详细)”(点击跳转)

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/716897.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存