#include<iostream> #include<cstdlib> 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);//从栈顶遍历栈 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); 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<<"please input the length you want to push"<<endl; int l; cin>>l; cout<<"please input the number you want to push"<<endl; for(int i=0;i<l;i++){ cin>>e; Push(s,e); } break; case 8://出栈 system("cls"); Pop(s,e); break; case 9://从栈顶遍历栈 system("cls"); StackVisit(s); break; } system("pause"); system("cls"); show(); } return 0; } //主界面 void show(){ cout<<"+-------------------------------------------------+"<<endl; cout<<"| |"<<endl; cout<<"| 1 ->Initialized the stack |"<<endl; cout<<"| 2 ->destroy the stack |"<<endl; cout<<"| 3 ->clear the stack |"<<endl; cout<<"| 4 ->whether the stack is empty |"<<endl; cout<<"| 5 ->get the length |"<<endl; cout<<"| 6 ->get the top of stack |"<<endl; cout<<"| 7 ->push into the stack |"<<endl; cout<<"| 8 ->pop from the stack |"<<endl; cout<<"| 9 ->visit the stack |"<<endl; cout<<"| 10->quit |"<<endl; cout<<"| |"<<endl; cout<<"+-------------------------------------------------+"<<endl; } //初始化栈 void InitStack(Stack &S){ S.base=new int[STACK_INIT_SIZE]; S.top=S.base; S.stacksize=STACK_INIT_SIZE; cout<<"the stack has been initialized!"<<endl<<endl; } //销毁栈 void DestroyStack(Stack &S){ delete S.base; cout<<"the stack has been destroyed"<<endl; } //清空栈 void ClearStack(Stack &S){ S.top=S.base; cout<<"the stack has been cleared"<<endl; } //判断栈是否为空 int StackEmpty(Stack S){ if(S.base==S.top){ cout<<"the stack is empty!"<<endl; return 1; } else { cout<<"the stack is not empty!"<<endl; return 0; } } //获取栈的长度 int StackLength(Stack S){ cout<<"the length of the stack is "<<S.top-S.base<<endl; return S.top-S.base; } //获取顶部元素 void GetTop(Stack S,int &e){ if(S.top==S.base){ cout<<"the stack is empty"<<endl; } else{ e=*(S.top-1); cout<<"the top of the stack is "<<e<<endl; } } //入栈 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<<"wrong!"<<endl; } else { S.top=S.base+S.stacksize; S.stacksize+=STACK_INCREAMENT; } } *(S.top++)=e; cout<<e<<" has been pushed into the stack"<<endl; } //出栈 void Pop(Stack &S,int &e){ if(S.top==S.base){ cout<<"the stack is empty"<<endl; } else { e=*--S.top; cout<<"the number has been poped,it‘s "<<e<<endl; } } //从栈顶遍历栈 void StackVisit(Stack S){ int e; while(S.top>S.base){ //方法一 //cout<<*(--S.top)<<‘ ‘; //方法二 Pop(S,e); } }
原文:http://www.cnblogs.com/-beyond/p/5986253.html