思想:用一个数组读入元素,再反向取元素即可模拟栈中元素先进后出,后进先出。
源代码:
#include <iostream>
using namespace std;
const int Max_SIZE=100;//定义栈大小
class Stack
{
public:
Stack();
~Stack();
void Push(int x);//入栈
void Pop();//出栈
int GetTop();//取栈顶元素
bool IsEmpty();//判空
bool IsFull();//判满
int GetSize();//取栈中元素个数
private:
int *data;
int top;//栈顶标记位
};
Stack::Stack()
{
top=0;
data=new int [Max_SIZE];
}
Stack::~Stack()
{
delete [] data;
}
bool Stack::IsFull()
{
if(top>=Max_SIZE) return true;
else return false;
}
bool Stack::IsEmpty()
{
if(top==0) return true;
else return false;
}
void Stack::Push(int x)
{
if(!IsFull())
{
data[top++]=x;
}
else
{
cout<<"Stack is Full!"<<endl;
}
}
void Stack::Pop()
{
if(!IsEmpty())
{
top--;//移动栈顶即可
}
else
{
cout<<"Stack is Empty!"<<endl;
}
}
int Stack::GetTop()
{
return data[top-1];
}
int Stack::GetSize()
{
return top;
}
int main()
{
Stack s;
int a,n;
cout<<"元素入栈(用空格分隔),输入-1结束:";
while(!s.IsFull())
{
cin>>n;
if(n==-1) break;
else s.Push(n);
}
cout<<"栈中元素个数:";
cout<<s.GetSize()<<endl;
cout<<"栈中元素出栈:";
while(!s.IsEmpty())
{
a=s.GetTop();
s.Pop();
cout<<a<<" ";
}
cout<<endl<<endl;
return 0;
}
截图: