1.特殊线性表——栈
栈:限定仅在表尾进行插入和删除操作的线性表。
空栈:不含任何数据元素的栈。
允许插入和删除的一端称为栈顶,另一端称为栈底。
栈的示意图——插入:入栈、进栈、压栈 删除:出栈、弹栈
栈的操作特性:后进先出
栈只是对表插入和删除操作的位置进行了限制,并没有限定插入和删除操作进行的时间。
栈的抽象数据类型定义
ADT Stack
Data
栈中元素具有相同类型及后进先出特性,
相邻元素具有前驱和后继关系
Operation
InitStack 功能:栈的初始化
DestroyStack功能:销毁栈
Push 功能:在栈顶插入一个元素
Pop 功能:删除栈顶元素
GetTop 功能:读取当前的栈顶元素
Empty 功能:判断栈是否为空
endADT
2.栈的顺序存储结构及实现
顺序栈类的声明
const int MAX_SIZE=100;
template <class T>
class seqStack
{
public:
seqStack ( ) ;
~seqStack ( );
void Push ( T x );
T Pop ( );
T GetTop ( );
bool Empty ( );
private:
T data[MAX_SIZE];
int top;
}
顺序栈的实现
入栈操作接口: void Push( T x );
判断是否是空栈:操作接口: bool Empty( )
取栈顶:操作接口: T GetTop( );
出栈:操作接口: T Pop( );
3.两栈共享空间(双端栈)——使用一个数组来存储两个栈,让一个栈的栈底为该数组的始端,另一个栈的栈底为该数组的末端,两个栈从各自的端点向中间延伸。
两栈共享空间的实现
插入——操作接口:void Push(int i, T x) ;
删除 ——操作接口:T Pop(int i) ;
4.链栈:栈的链接存储结构
链栈的实现
插入(入栈)——操作接口: void Push(T x);
删除(出栈)——操作接口: T Pop( );
5.后缀表达式求值
中缀表达式:操作数栈和运算符栈
6.特殊线性表——队列
队列:只允许在一端进行插入操作,而另一端进行删除操作的线性表。
空队列:不含任何数据元素的队列。
允许插入(也称入队、进队)的一端称为队尾,允许删除(也称出队)的一端称为队头。
队列的操作特性:先进先出
队头指针和队尾指针的说明
①队头指针指向队列中的第一个元素之前的元素,队尾指针指向队列中的最后一个元素
![](https://i-blog.csdnimg.cn/blog_migrate/f54aeacb102a8f12f024e66397e21d3e.png)
7.
8.
9.
10.