栈和队列其实本质上是两个线性表;
一、栈
1.基本概念
概念:仅在表尾进行插入或者删除操作的线性表
栈顶:表尾端为栈顶 top
栈底:表头端为栈底 base
特点:后进后出
base==top;说明栈是空的
2.栈的顺序储存结构:顺序栈(用数组实现顺序栈)
(1)入栈:
- 先判断是否栈满
- 然后栈顶指针++;
- 将新元素赋值给栈顶空间
(2)出栈 - 先判断栈是否为空
- 将要删除的栈顶元素返回
- 栈顶指针–;
2. 栈的链式存储结构:链栈
栈的链式存储结构称为链栈。链栈的结点类型与链式线性表的结点类型定义相同,不同的是它是仅在表头操作的单链表。链栈通常用不带头结点的单链表来实现,栈顶指针就是链表的头指针,栈顶就是单链表的头部。
二、队列
特点:先进先出的线性表
1. 循环队列
目的:不浪费空间
队头:f
队尾:r
- f==r 说明队列是空的
- 队满的时候:总是有一个空格,
f
f
f==
(
r
+
1
)
(r+1)
(r+1)%n,n是元素个数
三、C++的实现
1.栈
定义:stack<int> s;
(1)入栈:s.push(int x)
(2)出栈:s.pop()
(3)返回栈顶元素并删除:s.top()
(4)返回栈顶元素:s.peek()
(5)返回栈的大小:s.size()
(6)判断栈是否为空:s.empty()//如果为空就返回true
2.队列
定义:queue<int> q;
(1)入队:q.push()
(2)出队: q.pop()
(3)返回队头元素: q.front()
(4)返回队尾元素:q.back()
(5)返回队列大小: q.size()
(6)判断队是否为空 :q.empty()