栈
栈的基本概念
栈的定义
- 栈是仅允许在一段进行插入或者删除操作的线性表
- 栈顶:线性表允许进行插入和删除的那一端
- 栈底:固定的,不允许进行插入和删除的
- 操作特性:后进先出
- 栈的基本操作:InitStcak(&S)。。。
栈的顺序存储结构
- 顺序栈的实现:用一组地址连续的存储单元存放自栈底到栈顶的数据元素,top指针指向当前栈顶元素
初始时,S.top=-1,进栈时top++,再送值;出栈时,先取元素,top–; - 共享栈:栈底位置相对不变,让两个顺序栈共享一个一维数组空间;只有在整个存储空间被沾满的情况下才发生上溢
栈的链式存储结构
-
便于多个栈共享存储空间和提高效率,不存在上溢的
-
队列是一种操作受限的线性表,只允许在表的一段进行插入,在另一端进行删除,先进先出
队列的顺序存储结构
- 队列的顺序存储:一块连续的存储单元存放队列中的元素,附设两个指针:front指向对头和rear指向队尾的下一个位置,可能出现假溢出(rear=maxsize)
- 循环队列:把存储队列的元素从逻辑上视为一个环
队列的链式存储结构
- 实际上是一个同时带有对头指针和队尾指针的单链表`
//队列的链式存储
typedef struct {
ElemType data;
struct LinkNode* next;
}LinkNode;
typedef struct {
LinkNode* front, * rear;
}LinkQueue;
双端队列
- 允许两端都可以进行入队和出队操作的队列,仍是线性结构
- 还有输出受限的双端队列和输入受限的双端队列
栈和队列的应用
栈在括号匹配中的应用
栈在表达式求值中的应用
栈在递归中的应用:将递归算法转换成非递归的
队列在层次遍历中的应用
队列在计算机系统中的应用:解决主机和外部设备速度不匹配和多用户资源竞争
特殊矩阵的压缩存储
数组的定义
数组是由相同类型的数据元素构成的有限序列,每个数据元素称为一个数组元素
数组的存储结构
按行优先和按列优先
矩阵的压缩存储
压缩存储:多个值相同的元素只分配到一个存储空间,对0元素不分配空间;
方法:找出特殊矩阵中值相同的矩阵元素的分布规律,把那些呈现规律性分布的值相同的多个矩阵元素压缩到一个存储空间中