栈(Stack),特殊的线性表,只能在表头进行插入和删除操作。又称为后进先出表、LIFO表。
因为之前发帖问动态规划时别人说可以用栈实现动态规划而去看了看,写下来留作记录~
栈实现的基本操作有:1、Empty()——判断一个栈是否为空栈;
2、Full()——判断一个栈是否为满栈;(与1及其类似)
3、Top()——返回栈顶元素;
4、Push(x)——把X插入栈顶;
5、Pop()——删除栈顶元素并输出;
看书上说栈分为顺序实现的链式指针形实现,我先学了顺序实现,用得是数组和C++的类实现。
下面是代码实现:
#include <iostream>
using namespace std;
class Stack
{
private:
int top,*date,MAX;
public:
Stack(int size); //构造函数
~Stack(); //析构函数
bool Empty(); //判断是否为空
int Top(); //获取栈顶值
void Push(int x); //插入一个元素
void Pop(); //删除一个元素
int getSize(); //获取栈的大小
};
//----------------------------------成员函数的实现------------------------------
Stack::Stack(int size)
{
top=0;
MAX=size;
date=new int(size);
}
Stack::~Stack()
{
delete[] date;
}
bool Stack::Empty()
{
if(top==0)
return 1;
return 0;
}
int Stack::Top()
{
if(top==0)
cout<<"栈为空。"<<endl;
return date[top-1];
}
void Stack::Push(int x)
{
if(top==MAX)
cout<<"栈已满。"<<endl;
else
{
date[top]=x;
top++;
}
}
void Stack::Pop() //通过让后一位的元素覆盖当前元素实现删除。
{
if(top==0)
cout<<"栈为空。"<<endl;
else
{
top--;
cout<<date[top]<<endl;
}
}
int Stack::getSize()
{
return size;
}