在聊Stack之前,要说到一个概念:容器适配器。
之前我们接触了两种容器:顺序容器(也有叫序列容器的)和关联容器。
那么已知的数据结构有那么多,我们是不是都需要去一一实现呢?
当然不用,因为那些数据结构大都可以通过现有的数据结构实现,于是便出现了容器适配器。
容器适配器让一种已存在的容器类型采用另一种不同的抽象类型的工作方式实现。
例如,stack适配器可使任何一种顺序容器以栈的方式工作。
值的注意的是,由于容器适配器不是标准容器,所以不能通过迭代器进行元素访问,必须按照适配器的操作进行元素的增删查改。
在标准STL库里,容器适配器就三种:Stack,Queue,Priority_Queue三种,接下来我们就看一看。
容器适配器可以改变实现的类型,比如通过List实现Stack。可以根据需求进行变动。
首先我们来看,Stack,也就是栈。
Stack 是 先进后出(FILO)的线型表。
Stack只允许在尾端进行数据的插入和删除。
把基本概念用一张图就可以表示了:
删除元素称为出栈,或者叫弹栈。
加入元素称为入栈,或者叫压栈。
这两个操作只能在栈顶进行。
然后就没了…… 栈这个数据结构就是这么尿性~
怎么去实现就不是讨论的范围了,因为不是很难
你问我操作有几种?额,栈的操作不就那几个……
stack() 默认构造函数,创建一个空的 stack 对象。
stack(const stack&) 复制构造函数,用一个 stack 堆栈创建一个新的堆栈。
pop() 弹出栈顶元素
push() 栈顶压入元素
top() 获得栈顶元素
empty() 判断是否为空
size() 返回元素个数