学习目标
自考重点、期末考试必过指南,这篇文章让你理解什么是栈、什么是队列、什么是数组
掌握栈、队列的顺序存储结构和链式存储结构
掌握栈、队列的基本操作在顺序存储结构和链式存储结构上的实现
掌握矩阵的压缩存储
今天核心咱们先把栈搞清楚
栈和队列可以看做是特殊的线性表
。它们的特殊性表现在它们的基本运算是线性表运算的子集,它们是运算受限
的线性表
栈
栈(Stack)是运算受限的线性表,这种线性表上的插入和删除操作限定在表的一端进行
基本概念
栈顶:允许插入和删除的一端 栈尾:另一端 空栈:不含任何数据元素的栈 栈顶元素:处于栈顶位置的数据元素
书中的例子比较形象
洗盘子,放盘子,每次只能从这一摞盘子的最上面拿走,这就是栈的基本操作
看重点:栈---> ==后进先出(Last In First Out) LIFO 原则 ==
所以栈被称作 后进先出线性表 (后进先出表)
栈的插入和删除运算 分为成为 进栈和 出栈
栈的基本运算
- 初始化 InitStack(S) 构造一个空栈S
- 判断栈空 EmptyStack(S) 若栈为空,返回1,否则返回0
- 进栈Push(S,x) 将元素x插入栈S中
- 出栈Pop(S) 删除栈顶元素
- 取栈顶GetTop(S) 返回栈顶元素
栈的顺序实现
这里面有两个小知识点在写代码之前需要掌握
空栈做出栈操作,会出现问题,叫做“下溢” 满栈做进栈操作,会出现问题,叫做“上溢”
接下来我们就用C语言实现一下
初始化一个空栈
#include <stdio.h>
#include <stdlib.h>
// 声明顺序栈的容量
const int maxsize = 6;
struct seqtack{
int *da