数据结构教学导案Word格式文档下载.docx
《数据结构教学导案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构教学导案Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。
电脑+理论
教学方法
投影、讨论、板书
教学过程
设计
(包括讲授知识、演示内容及案例、提问及学生演示内容)
任务一、数组的定义、运算
前言:
(用时10分钟)
前4章介绍的数据结构共同特点:
(1)都属于线性数据结构;
(2)每种数据结构中的数据元素,都作为原子数据,不再进行分解;
本章讨论的两种数据结构:
数组和广义表,其共同特点是:
1)从逻辑结构上看它们,可看成是线性结构的一种扩展;
2)数据元素本身也是一个数据结构;
一、数组的概念(用时10分钟)
数组是由一组个数固定,类型相同的数据元素组成阵列。
以二维数组为例:
二维数组中的每个元素都受两个线性关系的约束
安徽新华电脑专修学院课堂教学教案
(电脑应用课使用)
教
学
过
程
设
计
(续表)
即行关系和列关系,在每个关系中,每个元素aij都有且仅有一个直接前趋,都有且仅有一个直接后继。
在行关系中
aij直接前趋是aij-1
aij直接后继是aij+1
在列关系中
aij直接前趋是ai-1j
aij直接后继是ai+1j
二维数组也可看作这样的线性表:
其每一个数据元素也是一个线性表
A=(α0,α1,α2,α3,α4,……,αp)
其中每一个数据元素αj是一个列向量的线性表
αj=(a0j,a1j,a2j,a3j,……,am-1j)
或αi是一个行向量的线性表
αi=(ai0,ai1,ai2,ai3,……,ain-1)
二、数组的基本操作(用时10分钟)
1读元素操作
2写元素操作
操作方法根据其存储结构决定
任务二、数组的顺序存贮结构(用时20分钟)
一维数组在内存中的存放很简单,只要顺序存放在连续的内存单元即可。
二维数组,如何用顺序结构表示?
内存地址是一维的,而数组是二维的,要将二维数组挤入一维的地址中,有两个策略:
以行为主序(C语言使用)
以列为主序
数组元素存储地址的计算:
假设二维数组A每个元素占用s个存储单元,Loc(aij)为元素aij的存储地址,Loc(a00)是a00存储位置,也是二维数组A的基址。
若以行序为主序的方式存储二维数组,则元素aij的存储位置可由下式确定:
Loc(aij)=Loc(a00)+(n⨯i+j)⨯s
若以列序为主序的方式存储二维数组,则元素aij的存储位置可由下式确定:
Loc(aij)=Loc(a00)+(m⨯j+i)⨯s
一般在程序设计过程中,一维数组和二维数组使用较普遍,超过二维以上的多维数组使用相对较少,对于高维数组的顺序存储方法,可以将二维的情形加以推广便能够得到。
复习思考题
作业
上机任务
案例分析:
以二维数组形式为例
参考文献
《数据结构》(C语言版)扬振生中国科学技术大学出版社
课后记
(或归纳小结)
本小节主要介绍数组的定义,存储(以行为序或以列为序)等等
2
课题引入(用时10分钟)
任务三、矩阵的压缩存储
(用时20分钟)
矩阵是许多科学与工程计算问题中常常涉及到的一种运算对象。
一个m行n列的矩阵是一平面阵列,有m⨯n个元素。
可以对矩阵作加、减、乘等运算。
只有少数程序设计语言提供了矩阵运算。
通常程序员是用二维数组存储矩阵。
由于这种存储方法可以随机地访问矩阵的每个元素,因而能较为容易地实现矩阵的各种运算。
应用中常遇到一些阶数很高的矩阵,矩阵中有许多值相同的元素或零元素。
二维数组存储矩阵会浪费很多的存储单元。
例如,设一个1000⨯1000的矩阵中有800个非零元素,若用二维数组存储需要106个存储单元。
因此,需要使用高效的存储方法,减少数据的存储量,即对原矩阵,根据数据分布特征进行压缩存储。
本章将讨论两类矩阵的压缩存储:
1特殊矩阵的压缩存储
2稀疏矩阵的压缩存储
一、特殊矩阵(用时40分钟)
值相同元素或者零元素分布有一定规律的矩阵称为特殊矩阵
例对称矩阵、上(下)三角矩阵都是特殊矩阵
特殊矩阵压缩存储(以对称矩阵为例)
对称矩阵是满足下面条件的n阶矩阵:
aij=aji0≤i,j≤n-1
a00a01a0n-1
a10a11a1n-1
an-10an-11an-1n-1
a00
a10a11
a20a21a22
对称矩阵元素可以只存储下三角部分,共需n(n+1)/2个单元的空间
(三角矩阵的存储方式类似)
以一维数组sa[]作为n阶对称矩阵A的存储结构,A中任意一元素aij与它的存储位置sa[k]之间存在着如下对应关系:
K=
i(i+1)/2+j当i≥j
j(j+1)/2+i当i<
j
例如,a53在sa[]中的存储位置是:
k=5*(5+1)/2+3=18
sa[18]=a53
压缩存储的对称矩阵的取值算法
intget_M(inti,intj)
{if(i>
=j)return(sa[i*(i+1)/2+j])
elsereturn(sa[j*(j+1)/2+i]);
}
压缩存储的对称矩阵的赋值算法
voidassign_M(inti,intj,intvalue)
=j)sa[i*(i+1)/2+j]=value;
elsesa[j*(j+1)/2+i]=value;
带状矩阵(用时30分钟)
所有非0元素都集
中在以主对角线为中心的带状区域,半带宽为d时,非0元素有
(2d+1)*n-(1+d)*d个
为计算方便,认为每一行都有2d+1个非0元素,若少则用0补足,所以,存放矩阵的数组sa[]有n(2d+1)个元素
数组元素sa[k]与矩阵元素aij之间有关系
k=i*(2d+1)+d+(j-i)
压缩存储的带状矩阵的取值算法
intget_Md(inti,intj)
{if(abs(i-j)<
=d)return(sa[i*(2*d+1)+d+(j-i)]);
elsereturn(0);
压缩存储的带状矩阵的赋值算法
voidassign_Md(inti,intj,intvalue)
=d)sa[i*(i+1)/2+j]=value;
以课件上的例子为案例进行分析
本小节主要介绍特殊矩阵的存储,如对称矩阵、上(下)三角矩阵、带状矩阵,它们的存储形式等等
任务三、矩阵的压缩存储(续)
二、稀疏矩阵(用时40分钟)
1、什么是稀疏矩阵
有较多值相同元素或较多零元素,且值相同元素或者零元素分布没有一定规律的矩阵称为稀疏矩阵。
例
01290000
A有42(67)个元素
有8个非零元素
0000000
A=
-30000140
00240000
01800000
1500-7000
2、稀疏矩阵的压缩存储(只讨论有较多零元素矩阵的压缩存储)
1)三元组表(i,j,aij)
A=((0,1,12),(0,2,9),(2,0,-3),(2,5,14),(3,2,24),(4,1,18),(5,0,15),(5,3,-7))
加上行、列数6,7
2)三元组顺序表
假设以顺序存储结构来表示三元组表,则可得稀疏矩阵的一种压缩存储方式——我们称之为三元组顺序表。
稀疏矩阵的三元组顺序表的类型定义
structnode
{introw,col;
//非零元的行下标和列下标
intvalue;
//非零元值
};
typedefstructnodeNODE;
NODEma[MAX];
ma[0]用于存储矩阵行数、列数、非零元个数
图示见课件
3)转置运算算法
转置运算是一种最常用的矩阵运算。
对于一个m行n列的矩阵A,它的转置矩阵B是一个n行m列的矩阵。
例如,下图中的矩阵A和B互为转置矩阵。
B=
00-30015
12000180
9002400
00000-7
000000
0014000
000000
转置运算算法
B
第0行
第一行
第二行
第三行
第四行
第五行
第六行
。
A
第0列
第一列
第二列
第三列
第四列
第五列
第六列
按照A的列序来进行转换的基本思想
对ma[]从头至尾扫描:
第一次扫描时,将ma[]中列号为0的所有元组交换行列值后,依次赋值到mb[]中
第二次扫描时,将ma[]中列号为1的所有元组交换行列值后,依次赋值到mb[]中
依此类推,直至将ma[]的所有三元组赋值到mb[]中
转置算法:
采用三元组表存储表示,求稀疏矩阵A的转置矩阵B
int