基础
0.1 栈
栈的特点
栈(Stack)是一种线性存储结构,它具有如下特点:
- 栈中的数据元素遵守”先进后出"(First In Last Out)的原则,简称FILO结构。
- 限定只能在栈顶进行插入和删除操作。即同一端插入删除
底层实现一般以数组或链表(单向链表、双向链表或循环链表)实现。
tips:数组栈,栈顶为数组尾,链表栈采用头插法(插入在链表头)
性质总览
数组栈、链表栈的实现以及各种详细
c++栈的常规操作以及实现
stack<int> a
size() empty()
pop() 不会返回弹出的元素(一般需要结合top()) push() top()
c++默认是以deque 双端队列实现的。
0.2 队列
队列的特点
队列(queue)与栈一样,是一种线性存储结构,它具有如下特点:
- 队列中的数据元素遵循“先进先出”(First In First Out)的原则,简称FIFO结构。
- 在队尾添加元素,在队头删除元素。即插入,删除放在两端
队列与栈一样是一种线性结构,因此以常见的线性表如数组、链表作为底层的数据结构。
性质总览
数组队列、链表队列的实现以及各种详细
数组队列
2个int( first last )分别标记队头和最后一个元素的下一个。(初始都为0)
假如不使用循环队列:
- 加元素 元素放在数组尾 last++
- 删除元素 ++first
假如使用循环队列: 保持数组中有一个位置别被用(为了分清队满和队空的情形)实现方式:
- (一个指向第一个元素,一个指向尾后元素) 相同表示空
- first==(last+1) %size 表示为满
链队列
以链表头部为队首(方便出队,即删除节点),以链表尾部为队尾(方便入队,即插入节点)。
class队列含有两个private Node * 数据成员(first,last) 一个first的next指向链表头,方便删除元素,一个last的next指向链表尾,方便插入元素
c++队列的常规操作以及实现
queue<int> a
size() empty()
pop() 不会返回弹出的元素 push()
front()back()(注意没有top())
c++默认是以deque 双端队列实现的。
c++双端队列的常规操作以及实现
deque<int> a
empty size push_front push_back pop_back pop_front erase(b,e) back front