当前课程知识点:数据结构 >  第3章 栈和队列 >  3.1 栈 >  3.1栈

返回《数据结构》慕课在线视频课程列表

3.1栈在线视频

下一节:3.2 栈的实现

返回《数据结构》慕课在线视频列表

3.1栈课程教案、知识点、字幕

同学们,大家好,我是云南大学信息学院教师孔兵

这一章我们讨论栈和队列

上一章,我们讨论的线性表

这一章讨论的栈和队列都被称为操作受限的线性表

栈和队列就数据元素及它们之间的关系来说

就是一个线性表,也就是说它还是一个序列

但是,栈和队列在插入和删除操作上受到了限制

所限制的是插入和删除的位置

我们在线性表中讨论过插入和删除操作

线性表中如果有n个元素

在线性表中插入的时候呢

合法的插入位置是1,2到n+1

合法的插入位置共有n+1个

删除的时候,合法的删除位置是1,2到n

合法的删除位置共有n个

栈和队列呢,他们的插入和删除位置是受到限制的

就栈而言,合法的删除位置只有一个

就是线性表的第n个元素,也就是线性表最后一个元素

合法的插入位置呢,也只有一个

就是第n+1个位置

队列呢,合法的删除位置是只有第1个位置

就是a1这个位置

合法的插入位置也只有一个

是第n+1个位置

因为插入和删除的位置受到了限制

所以,栈和队列有一些不同于普通线性表的特征

栈是限定仅在表尾进行插入和删除的线性表

为了讨论的方便,我们把表尾这一端称为栈顶

就是an这端,把表头这一端称为栈底

从栈的受限来看

插入和删除操作的位置都是在栈顶这一端

栈中没有元素的时候呢,我们成为空栈

下面结合示例,我们讨论一下栈的特征

栈是一个线性表,在描述上可以写成一个序列

a1,a2,…,an

称a1为栈底元素,an为栈顶元素

因为插入和删除都是在栈顶进行

这样的限制

使栈具有了普通线性表没有的特征

它主要的特征是所谓后进先出

后进先出,就是后插入的,先删除

我们把栈的插入操作称为入栈

栈的删除操作称为出栈

画栈的时候,我们一般把序列画成竖的样子

如图所示,a1这端在下部,an这端在上部

因为栈的插入受限

栈中元素的次序体现了元素插入的次序

如果栈中元素是a1,a2,…,an

那么元素入栈的次序就是a1先入

其次a2,最后an

出栈也是受限的

出栈的次序也会受到影响

下面通过一个例子

看看入栈序列和出栈序列的特征

假设占初始的时候为空栈

我们的入栈序列是1234

按照这个次序插入到栈中

允许入栈和出栈的操作交替进行

那么现在我们来考虑,在限制之下

可能的出栈序列和不可能的出栈序列

以出栈序列1234为例

可以这样获得这个出栈序列

1入栈,1出栈,2入栈,2出栈

3入栈,3出栈,4入栈,4出栈

我们就可以获得1234这样的出栈序列

从上述操作来看

所有的插入和删除操作都是在栈顶

这就是一个在限制下可能的一个出栈序列

再看,1342,可以这样获得

1入栈,1出栈,2,3连续入栈

3出栈,4入栈,42连续出栈

这样合法的出栈序列还有多个

同学们可以自己试一下

但是,同样因为受限

有的组合序列是不可能出现的

以出栈序列3412为例

因为出栈序列中第1个出栈的是3

因删除的限制,此时3应该是栈顶元素

那么,根据入栈次序

栈中应该是1,2,3,3位于栈顶

3出栈后,4入,4出,我们获得出栈序列34

栈中元素是1,2,2位于栈顶

根据出栈位置的限制

下一个出栈的必须是2

所以,我们不可能获得3412这样的出栈序列

再看一个不可能的出栈序列4231

4第1个出栈

按入栈的次序1234已经入栈

4位于栈顶,4出栈后

同样是出栈位置的限制

下一个出栈的只能是3

不能获得4231这样的出栈序列

对不可能的出栈序列我们可以总结一下它的特点

如果有后入栈的元素先出栈

如上例中的4是后入栈的

那么,在它前面入栈的元素

不可能出现同入栈次序相对位置相同的序列

如上例中的

23

这样的情况只要出现一个

就是不可能的出栈序列

关于栈的的特征

我们就讨论到这

下面看一下栈的抽象数据类型定义

在抽象数据类型占的定义当中

数据对象和数据关系这两部分

我们可以看到和线性表实际没有什么差异

就是说从数据结构来看

栈本身就是个线性表

在这做了一个简单的约定

约定an这一端栈顶,a1这端为栈底

下面简单看一下几个栈的操作

第1个是判断栈空的操作

栈为空返回真,非空返回假

Push是入栈的操作

实际上也就是插入的操作

涉及到两个参数

一个是要插入的对象栈S

一个是要插入的元素e

从插入操作来看

和线性表的插入操作的参数比较

少了一个插入位置的参数i

线性表的插入操作当中i指的是要插入的序列中的位置

而这里呢,因为栈中已经限定了插入的位置只能是n+1

所以这个关于位置插入位置的参数也就不需要了

Pop是删除操作

和插入操作类似,也有两个参数

一个是要删除的对象栈S

一个是一个引用e,用来带回删除的数据元素

同样也不需要指出删除的位置了

第4个基本操作是getTop

它的意思是取出栈顶元素

用引用e带回所取元素

取栈顶点元素并不涉及到对栈的删除

只是取出栈顶元素即可

同学们

关于栈的基本概念和特征我们就讨论到这儿

下节课再见

数据结构课程列表:

前言

-1.算法概念导入

--1.1 算法概念导入

-2.数据结构课程介绍

--2.数据结构课程介绍

-数据结构前言PPT

第0章 预备知识

-0.1变量、类型和表达式

--0.1变量、类型和表达式

-0.2 函数

--0.2 函数

-0.3 指针和单链表

--0.3 指针和单链表

-0.4 数组、指向函数的指针

--0.4 数组、指向函数的指针

-第0章 预备知识讨论题

-数据结构第0章预备知识PPT

第1章 绪论

-1.1什么是数据结构

--1.1什么是数据结构

--测试题

-1.2基本概念和术语

--1.2基本概念和术语

--测试题

-1.3数据结构的描述

--1.3数据结构的描述

--测试题

-1.4抽象数据类型的定义和实现

--1.4抽象数据类型的定义和实现

--测试题

-1.5算法和算法分析概念

--1.5算法和算法分析概念

--测试题

-1.6算法分析示例

--1.6算法分析示例

--测试题

-第1章 绪论讨论题

-数据结构第1章 绪论PPT

第2章 线性表

-2.1 线性表的类型定义

--2.1线性表的类型定义

--测试题

-2.2线性表的顺序表示和实现

--2.2 线性表的顺序表示和实现

--测试题

-2.3 线性链表

--2.3 线性链表

--测试题

-2.4 静态链表

--2.4 静态链表

--测试题

-2.5 循环链表和双向链表

--2.5 循环链表和双向链表

--测试题

-第2章 线性表讨论题

-数据结构第2章线性表PPT

第3章 栈和队列

-3.1 栈

--3.1栈

--测试题

-3.2 栈的实现

--3.2 栈的实现

--测试题

-3.3 栈的应用

--3.3 栈的应用

-3.4 栈与递归的实现

--3.4栈与递归的实现

--测试题

-3.5 队列和链队列

--3.5 队列和链队列

--测试题

-3.6 循环队列

--3.6 循环队列

--测试题

-第3章 栈和队列讨论题

-数据结构第3章栈和队列PPT

第4章 串

-4.1 串

--4.1 串

--测试题

-数据结构第4章 串PPT

第5章 数组

-5.1 数组定义和表示

--5.1 数组定义和表示

--测试题

-5.2矩阵的压缩存储

--5.2 矩阵的压缩存储

--测试题

-第5章 数组讨论题

-数据结构第5章数组PPT

第6章 树和二叉树

-6.1 树的定义和基本术语

--6.1 树的定义和基本术语

-6.2 二叉树和二叉树的性质

--6.2 二叉树和二叉树的性质

--测试题

-6.3 二叉树的存储结构

--6.3二叉树的存储结构

--测试题

-6.4 遍历二叉树

--6.4 遍历二叉树(1)

--6.4 遍历二叉树(2)

--测试题

-6.5 线索二叉树

--6.5 线索二叉树

--测试题

-6.6 树的存储

--6.6树的存储

-6.7 树的转换和遍历

--6.7 树的转换和遍历

--测试题

-6.8 赫夫曼树

--6.8 赫夫曼树

-6.9 赫夫曼编码

--6.9 赫夫曼编码

--测试题

-第6章 树和二叉树讨论题

-数据结构第6章树和二叉树PPT

第7章 图

-7.1 图的定义和术语

--7.1.1图的定义和术语(1)

--7.1.2图的定义和术语(2)

--测试题

-7.2 图的存储结构

--7.2.1 数组表示法(1)

--7.2.2 数组表示法(2)

--7.2.3 邻接表

--测试题

-7.3 图的遍历

--7.3.1 深度优先搜索

--7.3.2 广度优先搜索

--测试题

-7.4 最小生成树

--7.4.1 普里姆算法

--7.4.2 克鲁斯卡尔算法

--测试题

-7.5 有向无环图

--7.5.1 拓扑排序

--7.5.2 关键路径

--测试题

-7.6 最短路径

--7.6.1 单源最短路径-迪杰斯特拉算法

--7.6.2 每一对顶点之间的最短路径-弗洛伊德算法

--测试题

-第7章 图讨论题

-数据结构第7章图PPT

第8章 查找

-8.1 查找基本概念和顺序查找

--8.1 查找基本概念及顺序查找

--测试题

-8.2 有序表的查找

--8.2 有序表的查找

--测试题

-8.3 二叉排序树

--8.3.1 二叉排序树(1)

--8.3.2 二叉排序树(2)

--测试题

-8.4 平衡二叉树

--8.4 平衡二叉树

--测试题

-8.5 哈希表

--8.5.1 哈希表及哈希函数的构造

--8.5.2 解决冲突的方法

--8.5.3 哈希表的查找和性能分析

--测试题

-第8章 查找讨论题

-数据结构第8章查找PPT

第9章 内部排序

-9.1插入排序

--9.1.1 插入排序(1)

--9.1.2 插入排序(2)

--测试题

-9.2 希尔排序

--9.2 希尔排序

--测试题

-9.3 快速排序

--9.3 快速排序

--测试题

-9.4 选择排序

--9.4 选择排序

--测试题

-9.5 堆排序

--9.5 堆排序

--测试题

-9.6 归并排序

--9.6 归并排序

--测试题

-9.7 基数排序

--9.7 基数排序

--测试题

-9.8 排序方法总结

--9.8 排序方法总结

-第9章 内部排序讨论题

-数据结构第9章内部排序PPT

3.1栈笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。