#include
#include
using namespace std;
//定义初始化长度和每次增加的长度
const int STACK_INIT_SIZE=10;
const int STACK_INCREAMENT=2;
struct Stack{
int* base; //栈底
int* top; //栈顶
int stacksize; //已分配栈的大小
};
//函数声明
void show();//主界面
void InitStack(Stack &S);//初始化栈
void DestroyStack(Stack &S);//销毁栈
void ClearStack(Stack &S);//清空栈
int StackEmpty(Stack S);//判断栈是否为空
int StackLength(Stack S);//获取栈的长度
void GetTop(Stack S,int &e);//获取顶部元素
void Push(Stack &S,int e);//入栈
void Pop(Stack &S,int &e);//出栈
void StackVisit(Stack S);//从栈顶遍历栈
void Transfer(int n,int r,Stack &s);//数制转换
int main(){
show();
Stack s;
int e,action;
while(cin>>action){
switch(action){
case 1://初始化栈
system("cls");
InitStack(s);
break;
case 2://销毁栈
system("cls");
DestroyStack(s);
break;
case 3://清空栈
system("cls");
ClearStack(s);
cout<
break;
case 4://判断栈是否为空
system("cls");
StackEmpty(s);
break;
case 5://获取栈的长度
system("cls");
StackLength(s);
break;
case 6://获取顶部元素
system("cls");
GetTop(s,e);
break;
case 7://入栈
system("cls");
cout<
int l;
cin>>l;
cout<
for(int i=0;i
cin>>e;
Push(s,e);
}
break;
case 8://出栈
system("cls");
Pop(s,e);
break;
case 9://从栈顶遍历栈
system("cls");
StackVisit(s);
break;
case 10://数制转换
system("cls");
cout<
int n,r;
cin>>n>>r;
Transfer(n,r,s);
break;
default:
return 0;
}
system("pause");
system("cls");
show();
}
return 0;
}
//主界面
void show(){
cout<
cout<
cout<初始化栈 |"<
cout<销毁栈 |"<
cout<清空栈 |"<
cout<判断栈是否为空 |"<
cout<获取栈长度 |"<
cout<获取栈顶元素 |"<
cout<压栈 |"<
cout<出栈 |"<
cout<遍历栈 |"<
cout<数制转换 |"<
cout<退出 |"<
cout<
cout<
}
//初始化栈
void InitStack(Stack &S){
S.base=new int[STACK_INIT_SIZE];
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
cout<
}
//销毁栈
void DestroyStack(Stack &S){
delete S.base;
cout<
}
//清空栈
void ClearStack(Stack &S){
S.top=S.base;
}
//判断栈是否为空
int StackEmpty(Stack S){
if(S.base==S.top){
cout<
return 1;
} else {
cout<
return 0;
}
}
//获取栈的长度
int StackLength(Stack S){
cout<
return S.top-S.base;
}
//获取顶部元素
void GetTop(Stack S,int &e){
if(S.top==S.base){
cout<
} else{
e=*(S.top-1);
cout<
}
}
//入栈
void Push(Stack &S,int e){
if(S.top-S.base>=S.stacksize){
//在原有的空间上增加一段空间,用realloc(),具体使用方法请自行百度
S.base=(int* )realloc(S.base,(S.stacksize+STACK_INCREAMENT)*sizeof(int));
if(!S.base){
cout<
} else {
S.top=S.base+S.stacksize;
S.stacksize+=STACK_INCREAMENT;
}
}
*(S.top++)=e;
cout<
}
//出栈
void Pop(Stack &S,int &e){
if(S.top==S.base){
cout<
} else {
e=*--S.top;
cout<
}
}
//从栈顶遍历栈
void StackVisit(Stack S){
if(S.top==S.base){
cout<
}
int e;
while(S.top>S.base){
//方法一
cout<
//方法二
//Pop(S,e);
}
cout<
}
//进制转换,将十进制的n转换为r进制的数
void Transfer(int n,int r,Stack &S){
ClearStack(S);
//n=(n/r)*r+n%r;
while(n){
Push(S,n%r);
n=n/r;
}
cout<
while(S.top>S.base){
cout<
}
cout<
}