#include <iostream>
using namespace std;
//定义
typedef struct{
int *base;
int *top;
int stacksize;
}SqStack;
//初始化
void InitStack (SqStack &S){
S.base=new int[100];
S.top=S.base;
S.stacksize=100;
}
//销毁
void DestroyStack(SqStack &S){
if(S.base){
delete S.base;
S.stacksize=0;
S.base=S.top=NULL;
cout<<"销毁成功"<<endl;
}
else{
cout<<"销毁失败"<<endl;
}
}
//置空
void ClearStack(SqStack &S){
if(S.base){
S.base=S.top;
cout<<"成功置空"<<endl;
}
else{
cout<<"置空失败"<<endl;
}
}
//判空
void IfEmpty(SqStack &S){
if(S.base){
if(S.base==S.top){
cout<<"是空的"<<endl;
}
else{
cout<<"非空"<<endl;
}
}
else{
cout<<"栈不存在"<<endl;
}
}
//长度
void TheLengthStack(SqStack &S){
cout<<"长度为:"<<S.top-S.base<<endl;
}
//栈顶元素
void GetTop(SqStack &S){
if(S.base!=S.top){
cout<<"栈顶元素为:"<<*(S.top-1)<<endl;
}
}
//删除栈顶元素
void delTop(SqStack &S){
if(S.top==S.base){
cout<<"栈为空"<<endl;
}
else{
cout<<*(S.top-1)<<endl;
S.top--;
}
}
//输出
void Print(SqStack S){
if(S.base==S.top){
cout<<"栈为空"<<endl;
}
while(S.base!=S.top){
cout<<*(S.top-1)<<endl;
S.top--;
}
}
//插入元素使之成为栈顶元素
void Push(SqStack &S,int e){
if(S.top-S.base==S.stacksize)cout<<"栈已满"<<endl;
else{
*S.top++=e;
cout<<"成功入栈"<<endl;
}
}
//创建并输出栈元素
void CreatSqStack(SqStack &S){
InitStack (S);
cout<<"请输入您想入栈的元素个数:"<<endl;
int n;
cin>>n;
while(n){
cout<<"请输入要输入的元素"<<endl;
int m;
cin>>m;
Push(S,m);
n--;
}
cout<<"创建的栈中元素为:"<<endl;
Print(S);
}
//进制转换
void Change(int m){
int i;
int a[16] = {0};
for (int j = 0; j < 15; j++)
{
i = m%2;
m = m/2;
a[j] = i;
}
for (int j = 15; j >= 0; j--)
{
cout << a[j];
if(j%4 == 0)
cout << " ";
}
cout<<""<<endl;
}
void Menu(){
cout<<"1.初始化为空栈"<<endl;
cout<<"2.销毁栈"<<endl;
cout<<"3.将栈置空"<<endl;
cout<<"4.判断栈是否为空"<<endl;
cout<<"5.返回栈的长度."<<endl;
cout<<"6.求栈顶元素"<<endl;
cout<<"7.插入元素,并使其成为栈顶元素"<<endl;
cout<<"8.删除栈顶元素,并返回其值"<<endl;
cout<<"9.输出栈内元素"<<endl;
cout<<"10.创建并输出栈元素"<<endl;
cout<<"11.将输入的十进制转化为二进制"<<endl;
cout<<"12.退出"<<endl;
}
int main()
{
SqStack S;
Menu();
int n;
while(true){
cout<<"请输入你的选择:"<<endl;
cin>>n;
switch(n){
case 1:
InitStack (S);
cout<<"初始化成功"<<endl;
break;
case 2:
DestroyStack(S);
break;
case 3:
ClearStack(S);
break;
case 4:
IfEmpty(S);
break;
case 5:
TheLengthStack(S);
break;
case 6:
GetTop(S);
break;
case 7:
cout<<"请输入想要插入的元素:"<<endl;
int e;
cin>>e;
Push(S,e);
break;
case 8:
delTop(S);
break;
case 9:
Print(S);
break;
case 10:
CreatSqStack(S);
break;
case 11:
cout<<"输入要转换的数字:"<<endl;
int m;
cin>>m;
Change(m);
break;
}
}
}
效果图:
进制转换参考的C++ 将十进制数转换为二进制数方法_c++十进制转化为二进制-CSDN博客这篇博客