利用栈进行进制转换(c++)

    科技2022-07-10  180

    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; }

    欢迎各位小伙伴留言。

    Processed: 0.053, SQL: 8