问题描述:
面试或笔试时,常常会遇到自主实现一个栈,以实现进出栈,判空和满等的相关操作,虽然实现难度较为简单,但却也算得上一个热门题型,主要考察学生有效时间内对于简单栈的设计是否考虑周全以及成员函数的实现以及参数和函数返回值等细节问题。
#include<iostream>
using namespace std;
const int Max_size = 100;
class Stack
{
public:
Stack();//构造函数
~Stack();//析构函数(可省略,系统自动调用默认析构函数)
void Push(const int a);//入栈操作
int Pop();//出栈操作
bool IsEmpty()const;//判空操作(const修饰成员列表,表示修饰的成员对象不能更改其值)
bool IsFull()const;//判满操作
void Clear();//清空操作
void Display();//打印该栈
private:
int arr[Max_size];//存放元素值(成员变量值)
int Top;//栈顶指针
};
Stack::Stack()
{
Top = -1;
}
Stack::~Stack(void)
{}
void Stack::Push(const int a)
{
if (Top == Max_size - 1)
{
cout << "The Stack is full!" << endl;
return;
}
Top++;
arr[Top] = a;
}
int Stack::Pop()
{
if (Top == -1)
{
cout << "The Stack is Empty!" << endl;
return 0;
}
int tmp = arr[Top];
Top--;
return tmp;
}
bool Stack::IsEmpty()const
{
if (Top == -1)
{
return true;
}
else
return false;
}
bool Stack::IsFull()const
{
if (Top == Max_size - 1)
{
return true;
}
else
return false;
}
void Stack::Clear()
{
Top = -1;
}
void Stack::Display()
{
for (int i = 0; i <= Top; i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
//测试用例
void Test()
{
Stack sp[5];
sp[0].Push(1);
sp[1].Push(2);
sp[2].Push(3);
sp[3].Push(4);
sp[4].Push(5);
sp[0].Display();
sp[1].Display();
sp[2].Display();
sp[3].Display();
sp[4].Display();
//sp[4].Pop();
//sp[4].Display();
}
//主函数
int main()
{
Test();
return 0;
}