线性表及其顺序存储 教学设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章线性表及其顺序存储
一、教学思想
作为构成“数据结构线性表及顺序存储结构教学设计与算法”课程的基石,线性结构是应用最为广泛的一种数据结构。不仅成为很多应用直接选用的数据结构,也是构成其他复杂数据结构的基本单元。例如操作系统的存储管理本质上就是利用线性表管理可利用空间,而散列方法则是把顺序表和链表结合起来的一种数据结构。
线性结构的基本特点是结构中的元素之间满足线性关系,按这个关系可以把所用元素排成一个先行序列。线性表、栈和队列都属于线性结构,它们之间主要区别在于实施于数据源上的操作有所不同。线性表一章主要介绍线性表的概念、存储表示、基本运算的实现以及一些应用实例。
线性表是由若干数据元素组成的有限序列,常用的存储方式有顺序和链式两种。(1)线性表的基本概念和计算;
(2)顺序循环队列的概念和运用;
2. 教学目标
(1)理解线性结构的基本概念;
(2)熟练掌握线性表上的常用运算;
(3)掌握线性表的顺序实现和链式实现,并能够分析各运算的顺序实现和链式实现的复杂度;
(4)了解顺序和链表各自的优缺点和适用场景,并能够根据实际情况,进行合理的选择。
3.教学重点和难点
线性表的重点包括:
(1)线性结构的概念及其特点;
(2)线性表的顺序存储实现;
(3)线性表的链式存储实现;
其中,难点在于
(1)线性表的顺序存储中各运算的实现及其时间复杂性分析,尤其是插入和删除运算;
(2)线性表的链式存储中各运算的实现及其时间复杂性分析,尤其是插入和删除运算;
解决方法:重点讲解,启发学生动手动脑,多做习题。
教学步骤教学内容设计意图
表达方式放两张大
家都熟悉
两个二维
表的实例
问题引入
两张表格对于本节有什么意义呢?各表项之间是什么关系?为什么内容不同的二维表其表项之间具有相同的逻辑关系?我们接下来要解决什么问题呢?
下面我们了解本章的重要知识点:放两张大家都熟悉两个二维表的实例引出线性表的定义。
具有共同的数据模型——线性表。
通过上表引出定义线性表(简称表):零个或多个具有相同类型的数据元素的有限序列。数据元素的
个数称为线性表的长度。
·长度等于零时称为空表,通常记为:L=( );
·非空表通常记为:L=(a1,a2,……,a n)。
理解线性表的定义有以下要点:
⑴序列——顺序性:元素具有线性顺序,第一个元素无前驱,最后一个元素无后
继,其他每个元素有且仅有一个前驱和一个后继。
⑵有限——有限性:元素个数有限,在计算机中处理的对象都是有限的。
⑶相同类型——相同性:元素取自于同一个数据对象,这意味着每个元素占用相
同数量的存储单元。
⑷元素类型不确定——抽象性:数据元素的类型是抽象的、不具体的,需要根据
具体问题确定。
强调:
a i为一个
抽象符号,
表示数据
元素;
下角标i表
示该元素
在线性表
中的位置
或序号。
教学步骤教学内容设计意图
表达方式
观察示意图
对线性表的
顺序存储结
构的理解和运算
2.2.1 线性表的顺序存储结构——顺序表(10分钟)
顺序表用一段地址连续的存储单元依次存储线性表的数据元
素。线性表(a1,a2,……,a n)的顺序存储示意图如图2.5所示。
由于线性表中每个数据元素的类型相同,可以用C++语言中的
一维数组来实现顺序表,也就是把线性表中相邻的元素存储在数组
中相邻的位置,如图2.6所示
由图2.6可以看出,线性表第i个元素存储在数组下标为i-1
的位置,
即数据元素的序号和存放它的数组下标之间存在对应关系。
强调存储
要点:
1.连续单
元;
2.依次存
储。
如何实现
顺序表的
内存分
配?
复习数组
有关内容
总结存储
特点:
数据元素
之间的逻
辑关系由
数据元素
在数组中
的存储位
置表示。
图2.5 用一段连续空间存储线性表
a1 a2……a i-1 a i……a n
学习线性表的基本运算插入操作3. 插入
操作接口void Insert(int i, T x):在线性表的第i(1≤i≤n+1)
个位置上插入一个新元素x。
插入前:(a1,…,a i-1,a i,…,a n),插入后:(a1,…,a i-1,
x,a i,…,a n),顺序表在插入前后的状态对比如图2.12所示。
插入操作要点:
·顺序存储要求逻辑上相邻的元素存储在数组中相邻的单元。
·注意元素移动的方向——后移一个单元。
·从最后一个元素开始移动,直至第i个元素。
分析边界条件:
·如果表满了,则引发上溢异常。
·如果元素的插入位置不合理,则引发位置异常。
提示:
通过插入
前后状态
的对比入
手,注意:
元素a i
-1
和
a i之间的
逻辑关系
发生了变
化并且存
储位置要
反映这个
变化
提出问题:
为什么移动
元素?
向什么方向
移动?
从哪个元
素开始移
动?到哪
个元素为
止?
进一步提
出问题:
什么情况
下不能插
入?——
注意边界
条件。
算法实现插
入操作
C语言描述
template
void SeqList::Insert(int i, T x)
{
if (length>=MaxSize) throw "上溢";
if (i<1 | | i>length+1) throw "位置";
for (j=length; j>=i; j--)//注意j指的是元素序号
data[j]=data[j-1]; //注意第j个元素存储在数组下标为j-1处
data[i-1]=x;
length++;} 算法设计框架:分析问题→伪代码描述算法→C++描述算法,这个框架体现
了抽象分级的思维方式。
插入后a1
10
a2
12
a3
15
a4
25
a5
8
a6
16
a7
20
空闲7 插入15
数组下标:0 1 2 3 4 5 MaxSize-1
a1 10
a2
12
a3
25
a4
8
a5
16
a6
20
空闲 6
插入前
图2.12 顺序表插入前后状态的对比