线性表及其顺序存储 教学设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 顺序表插入前后状态的对比

相关文档
最新文档