c++利用顺序栈存储结构将十进制转换为八进制和十六进制

  • 什么是栈?
    栈是限定仅在表尾进行插入或删除炒作的线性表。
  • 特性
    先进后出,即最先进栈的只能最后出栈。
  • 顺序栈的顺序存储结构是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设栈顶指针top指示栈顶元素在顺序栈的位置。(同时可设,也可不设栈底指针base,它始终指向栈底,可作为栈空标记。本案例就未设置栈底指针)
    图示:在这里插入图片描述
  • 缺点:因为顺序栈是利用一组连续地址的存储单元,所以需提前设置好栈的大小,容易导致存储空间的浪费。
#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
#define stacksize 100
class stack 
{
	private:
		int  data[stacksize];
    	int top;
    public:
    	void initstack(int&);
    	int stackempty(int&);
    	int stackfull(int&);
    	void push(int&,int x);
		int pop(int&);
		int stacktop(int&); 
		void conversion();
};
void stack::initstack(int& top)//初始化栈指针 
{top=-1;}

int stack::stackempty(int& top)//判断栈是否为空 
{return(top==-1);}

int stack::stackfull(int& top)//判断是否栈满 
{return(top==stacksize-1);}

void stack::push(int& top,int x)//压栈 
{ 
	if (stackfull(top)) {printf("stack overflow");  return;}
	if(x>=10)//十六进制大于十转换 
		{
			switch(x)
			{
				case 10: x=65;break;
				case 11: x=66;break;
				case 12: x=67;break;
				case 13: x=68;break;
				case 14: x=69;break;
				case 15: x=70;break;	
			}
		} 
	data[++top]=x;
} 

int stack::pop(int& top)//出栈 
{
	char x;
	if(stackempty(top)) 
	{printf("stack underflow");return('$');}
	x=data[top];
	top--;
	return(x);
}   

int stack::stacktop(int& top)
{
	if (stackempty(top)) printf("stack is empty");
	return (data[top]);
}         

void stack::conversion( )//调用 
{
	int n,i,xx;
	initstack(top);
	cout<<"请输入十进制数:";
	cin>>n; 
	cout<<"8  进制输出 请输入:1"<<endl;
	cout<<"16 进制输出 请输入:2"<<endl;
	cout<<"   退出     请输入:3"<<endl; 
	cin>>i;
	if(i==1)//如果i==1八进制输出
	{
		while(n)
		{
			xx=n%8;
			push(top,xx);
			n=n/8;
		}
		int e;
		while(!stackempty(top))
		{
			e=pop(top);
			cout<<e;
		}
	}
	else if(i==2)//如果i==2十六进制输出
	{
		while(n)
		{
			xx=n%16;
			push(top,xx);
			n=n/16;
		}
		int e;
		char s;
		while(!stackempty(top))
		{
			e=pop(top);
			if(e>9)
			{
				s=char(e);
				cout<<s;
			}
			else//其它结束程序
				cout<<e;
		}
	}
	else
		exit;
} 

int main() 
{
	stack ps;
	ps.conversion();
	cout<<endl;
	return 0;
}

欢迎各位小伙伴留言。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐