DS05-数组和广义表-数据结构(C语言版)(第2版)-唐国民-清华大学出版社
数据结构C语言版(第2版)严蔚敏人民邮电出版社课后习题答案
数据结构(C语言版)(第2版)课后习题答案李冬梅2015.3目录第1章绪论...................................................................................... 错误!未定义书签。
第2章线性表 .................................................................................. 错误!未定义书签。
第3章栈和队列 .............................................................................. 错误!未定义书签。
第4章串、数组和广义表 ............................................................... 错误!未定义书签。
第5章树和二叉树........................................................................... 错误!未定义书签。
第6章图............................................................................................ 错误!未定义书签。
第7章查找...................................................................................... 错误!未定义书签。
第8章排序...................................................................................... 错误!未定义书签。
数据结构第五章 数组与广义表
压缩存储方法:只需要存储下三角 (含对角线)上的元素。可节省一 半空间。
可以使用一维数组Sa[n(n+1)/2]作为n阶对称矩阵A的存 储结构,且约定以行序为主序存储各个元素,则在Sa[k]和矩
阵元素aij之间存在一一对应关系: (下标变换公式)
i(i+1)/2 + j 当i≥j k = j(j+1)/2 + i 当i<j
q = cpot[col];
T.data[q].i = M.data[p].j; T.data[q].j = M.data[p].i; T.data[q].e = M.data[p].e; ++cpot[col]; }
分析算法FastTransposeSMatrix的时间 复杂度:
for (col=1; col<=M.nu; ++col) … … for (t=1; t<=M.tu; ++t) … … for (col=2; col<=M.nu; ++col) … … for (p=1; p<=M.tu; ++p) … …
//对当前行中每一个非零元
处
brow=M.data[p].j;
理
if (brow < N.nu ) t = N.rpos[brow+1];
M
else { t = N.tu+1 }
的
for (q=N.rpos[brow]; q< t; ++q) { ccol = N.data[q].j; // 乘积元素在Q中列号
一、三元组顺序表
对于稀疏矩阵,非零元可以用三元组表示, 整个稀疏矩阵可以表示为所有非零元的三元组所 构成的线性表。例如:
数据结构(C语言版 李素若)第五章 数组和广义表PPT资料优秀版
OLink *hl; Head(B)=e Tail(B)=() 4.求广义表的深度
h广p义), s表ub的); 定q=义p;并没有限制元L素O的递C归(,)=即广L义O表也C可(以a是11其1自)+身d的2子d表3。(i1-1)+d3(i2-1)+(i3-1)
5.3 矩阵压缩存储 18
5.3.1 对称矩阵
对称矩阵的特点是:在一个n阶方阵中,有aij=aji,其中 1≤i,j≤n。对称矩阵关于主对角线对称,比如,我们只存储下三 角中的元素aij,其特点是中j≤i且1≤i≤n,对于上三角中的元素 aij,它和对应的aji相等,因此当访问的元素在上三角时,直接 去访问和它对应的下三角元素即可,这样,原来需要n*n个存 储单元,现在只需要n(n+1)/2个存储单元了,节约了n(n-1)/2个 存储单元,当n较大时,这是可观的一部分存储资源。
第5章 数组和广义表
1
5.1 数组类型定义 5.2 数组顺序存储和实现 5.3 矩阵压缩存储 5.4 稀疏矩阵 5.5 广义表
5.1 数组类型的定义 2
1.一维数组 一维数组可以看成是一个线性表或一个向量(第2章已经介 绍),它在计算机内是存放在一块连续的存储单元中,适合于 随机查找。这在第2章的线性表的顺序存储结构中已经介绍。 2.二维数组 二维数组中的每一个元素最多可有两个直接前驱和两个直接 后继(边界除外),故是一种典型的非线性结构。例如,设A 是一个有m行n列的二维数组,则A可以表示为:
LOC(bij)=LOC(b11)+(d2-c2+1)(i-1)+(j-1) 公式中第2项是i-1个整行元素,每行d2-c2+1个元素。也可以解 释为第1维下标减1乘上后面第2维下标区间。
数据结构(C语言版)(第2版)课后习题答案
数据结构(C语言版)(第2版)课后习题答案李冬梅2015.3目录第1章绪论 (1)第2章线性表 (5)第3章栈和队列 (13)第4章串、数组和广义表 (26)第5章树和二叉树 (33)第6章图 (42)第7章查找 (54)第8章排序 (65)第1章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。
如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。
数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。
在有些情况下,数据元素也称为元素、结点、记录等。
数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
例如,学生基本信息表中的学号、姓名、性别等都是数据项。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
例如:整数数据对象是集合N={0,±1,±2,…},字母字符数据对象是集合C={‘A’,‘B’,…,‘Z’,‘a’,‘b’,…,‘z’},学生基本信息表也可是一个数据对象。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。
逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。
存储结构:数据对象在计算机中的存储表示,也称为物理结构。
抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。
具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。
数据结构C语言版第2版课后习题答案17888
数据结构(C语言版)(第2版)课后习题答案李冬梅2015.3目录第1章绪论 (1)第2章线性表 (5)第3章栈和队列 (14)第4章串、数组和广义表 (27)第5章树和二叉树 (34)第6章图 (44)第7章查找 (56)第8章排序 (67)第1章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。
如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。
数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。
在有些情况下,数据元素也称为元素、结点、记录等。
数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等.数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
例如,学生基本信息表中的学号、姓名、性别等都是数据项。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
例如:整数数据对象是集合N={0,±1,±2,…},字母字符数据对象是集合C={‘A’,‘B’,…,‘Z’,‘a’,‘b',…,‘z’},学生基本信息表也可是一个数据对象。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合.换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。
逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。
存储结构:数据对象在计算机中的存储表示,也称为物理结构.抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。
具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合.2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系.答案:例如有一张学生基本信息表,包括学生的学号、姓名、性别、籍贯、专业等。
《数据结构与算法》第五章-数组和广义表学习指导材料
《数据结构与算法》第五章数组和广义表本章介绍的数组与广义表可视为线性表的推广,其特点是数据元素仍然是一个表。
本章讨论多维数组的逻辑结构和存储结构、特殊矩阵、矩阵的压缩存储、广义表的逻辑结构和存储结构等。
5.1 多维数组5.1.1 数组的逻辑结构数组是我们很熟悉的一种数据结构,它可以看作线性表的推广。
数组作为一种数据结构其特点是结构中的元素本身可以是具有某种结构的数据,但属于同一数据类型,比如:一维数组可以看作一个线性表,二维数组可以看作“数据元素是一维数组”的一维数组,三维数组可以看作“数据元素是二维数组”的一维数组,依此类推。
图5.1是一个m行n列的二维数组。
5.1.2 数组的内存映象现在来讨论数组在计算机中的存储表示。
通常,数组在内存被映象为向量,即用向量作为数组的一种存储结构,这是因为内存的地址空间是一维的,数组的行列固定后,通过一个映象函数,则可根据数组元素的下标得到它的存储地址。
对于一维数组按下标顺序分配即可。
对多维数组分配时,要把它的元素映象存储在一维存储器中,一般有两种存储方式:一是以行为主序(或先行后列)的顺序存放,如BASIC、PASCAL、COBOL、C等程序设计语言中用的是以行为主的顺序分配,即一行分配完了接着分配下一行。
另一种是以列为主序(先列后行)的顺序存放,如FORTRAN语言中,用的是以列为主序的分配顺序,即一列一列地分配。
以行为主序的分配规律是:最右边的下标先变化,即最右下标从小到大,循环一遍后,右边第二个下标再变,…,从右向左,最后是左下标。
以列为主序分配的规律恰好相反:最左边的下标先变化,即最左下标从小到大,循环一遍后,左边第二个下标再变,…,从左向右,最后是右下标。
例如一个2×3二维数组,逻辑结构可以用图5.2表示。
以行为主序的内存映象如图5.3(a)所示。
分配顺序为:a11 ,a12 ,a13 ,a21 ,a22,a23 ; 以列为主序的分配顺序为:a11 ,a21 ,a12 ,a22,a13 ,a23 ; 它的内存映象如图5.3(b)所示。
《数据结构与算法(第二版)》汪沁 第5章 数组和广义表
q[i][j]+=m[i][k]*n[k][j];
} 此算法的复杂度为 O(m1*n1*n2)。 10、答: int DiagonalProduct(int *a, int m) {
int i,j,k,sum=0; for(k=0; k<m; k++){
sum += a[k*m+k] * a[k*m+m-k-1]; } return sum; }
5、长度:5, 深度:3
6、答:(1) 9*10*6=540; (2)第 8 列 9*6=54 字节,第 5 行 10*6=60 字节
(3) 8*10 + 5 = x*9 + y x=4,y=9
A[4][9]
7、教材 P108-110
8、答:
(1)
1
2
3
4
1
1
12
2
23
3
1
44
3
3
23
4
4
14
(2)
存储结构,完成求矩阵元素之和,并分析运算的优缺点。 【参考答案】:设稀疏矩阵 A 为 m 行 n 列,如果采用二维数组常规存储,则其空间复杂度为 O(m×n)。因为要将所有的句镇元素累加起来,需要使用一个两层的嵌套循环结构,所以其 时间复杂度为 O(m×n)。如果采用三元组顺序表进行压缩存储,假设稀疏矩阵中有 t 个非零 元素,则其空间复杂度为 O(t),将所有的矩阵元素累加起来只需要将三元组顺序表扫描一遍, 其时间复杂度也为 O(t)。当 t<< m×n 时,采用三元组顺序表存储可以获得较好的时间及空 间性能。 4、广义表和线性表的区别与联系。 【参考答案】:广义表是线性表的推广,线性表是广义表的特例。当广义表中的元素都是原 子时,即为线性表。
《数据结构——用C语言描述(第二版)》第5章 数组和广义表
第五章 数组和广义表
在压缩存储时,矩阵中值相同的元素C可共享一个存储空间,元素 为零则可不必分配空间,而其余的元素有 n(n+1)/2个,因此三角矩阵 可用一维数组M[n×(n+1)/2+1]来存储,其中常数C放在数组的最后一 个下标变量中。
假设A和B矩阵分别用matrix型指针变量a和b表示,矩阵的转置可以 按以下进行:由于B的行是A的列,所以可按照b->data三元组表的次序在 a->data中找到相应的三元组进行转置,即可按a->data的列序转置,所得 到的转置矩阵B的三元组表b->data必定是按行优先存放的。因此,可以对 三元组表a->data从第一行起扫描,找到A的每一列中所有的非零元素,就 可以实现转置。
LOC ( aij ) =LOC ( a00) +(i×n+j) × c 同理可推导出以列为主序优先存储时数据元素a i j 的存储地址,其计算公式 为:
LOC( a i j ) =LOC( a00 ) +( j × n +i ) × c 对于三维数组Am×n×p而言,若以行为主序优先存储时,则其数据元 素aijk的存储地址可为: LOC ( a i j k) =LOC ( a000) +[ i × m×p +j ×p +k] × c 对于一般的二维数组A[c1…d1,c2…d2]而言,此处c1,c2的值不一定是 0,a i j 的地址为: LOC ( a i j ) =LOC ( a c 1 c 2 ) +[ ( i – c 1 )* ( d 2 – c 2 +1) +j – c 2 ] * c
数据结构(C语言版)(第2版)
构
5.5遍历二叉
树和线索二叉
树
1
4
5.7哈夫曼树
及其应用
2
5
5.8案例分析
与实现
5.9小结
习题
6.1图的定义和基本
术语
6.3图的类型定义
6.2案例引入
6.4图的存储结构
3
6.7案例分析
与实现
1
6.5图的遍历
4
6.8小结
2
6.6图的应用
5
习题
7.1查找的基本概念
7.2线性表的查找
7.3树表的查找
7.4散列表的查找
7.5小结
习题
8.1基本概念和排序
方法概述
8.3交换排序
8.2插入排序
8.4选择排序
3
8.7外部排序
1
8.5归并排序
4
8.8小结
2
8.6基数排序
5
习题
作者介绍
这是《数据结构(C语言版)(第2版)》的读书笔记模板,暂无该书作者的介绍。
感谢观看
用来学习,适合已经完全学会的人过来查漏补缺。
没有老师的同学可以去b站听听青岛大学王卓老师的课,教材是这本…。
严谨的教科书,和习题及上级指导一起阅读能学到很多东西,花了28个小时阅读,不过对于较难的一些算法
比如图算法的弗洛伊德算法,排序种的基数排序,二叉树中的avl树等还是一知半解,可能再花2个28小时能有突
数据结构(C语言版)(第2
版)
读书笔记模板
目录
01
思维导图
02
内容摘要
03
读书笔记
04
精彩摘录
05
目录分析
06
清华大学本科计算机课程介绍
课号:00240013 学分: 3 课程名称 中文 课程属性:全校任选 英文 开课学期:秋、春 Fundamentals of Computer-aided Design 出版社 清华大学出版社 出版年月 2002 年 8 月
计算机辅助设计技术基础 书名 作者
使用教材
计算机辅助设计技术基 础教程
本课程是计算机科学与技术系为全校本科生开设的一门重要的计算机专业基础 课,目的是培养学生的软件工程素质,提高学生的软件开发能力。 本课程以软件生命周期的主要活动为主线,从软件及软件工程的历史和发展、软 件开发过程、需求分析、软件设计、程序编码、软件测试、软件维护、软件项目管理、 标准及规范等方面全面介绍软件工程的基本理论、方法、技术和工具。
课号: 30240273 课程名称
学分: 3 中文
课程属性:本科必修 开课学期: 春季 数据结构 书名 作者 英文 Data Structure 出版社 出版年月 1997
使用教材 参考书 讲课对象 课 程 简 介
数据结构(C 语言版)
严蔚敏,吴伟民 清华大学出版社
[1] Kruse, et.al. Data Structures & Program Desing in C. [2] Knuth. The Art of Computer Programming. Volume 1. 本科生 适用专业 工业工程系 先修课 C 语言程序设计
This course focuses on the basic concepts, principles, algorithms and applications of computer-aided design(CAD), it mainly consists of the following topics: software and hardware system of CAD, two-dimensional transformations, line clipping, raster display of 2D graphics, curves Introduction and surfaces, solid modeling, three-dimensional transformations, three-dimensional viewing, visible-surface determination, basic illumination models, and introductions to AutoCAD, 3DMAX 5.0 and OpenGL. It is an ideal choice for students who want to learn the rudiments of this dynamic and exciting CAD technology. 姓 名 讲 课 教 师 职称 主要教学和科研领域 主要教学领域: (1)承担全校计算机辅助设计技术基础 课教学; (2)承担研究生的小波分析及其应用课教学; 主要研究领域:小波分析及其应用,科学计算可视化, 计算机图形学,几何造型和图象处理。 (1)承担全校计算机辅助设计技术基础课教学
数据结构 考研参考书
数据结构考研参考书
数据结构是计算机科学和软件工程学科中的核心课程,也是考研的重要科目之一。
以下是一些建议的考研参考书:
1. 《数据结构(C语言版)》——严蔚敏、吴伟民编著,清华大学出版社。
这本书是国内最经典的数据结构教材之一,被广大考生认为是必备的参考书之一。
它涵盖了所有考研数据结构的知识点,并且讲解深入浅出,易于理解。
2. 《数据结构题集(C语言版)》——严蔚敏、吴伟民编著,清华大学出版社。
这本书是上述教材的配套题集,包含了大量的练习题和真题,对于考研生来说非常有价值。
通过练习这些题目,可以加深对数据结构的理解和掌握。
3. 《算法与数据结构考研试题精析(第二版)》——陈守孔、胡潇琨、李
玲编著,机械工业出版社。
这本书是一本经典的数据结构和算法考研辅导书,包含了大量的历年真题和解析。
通过做题和看解析,可以更好地理解考研的出题方式和解题技巧。
4. 《数据结构与算法分析(C语言版)》——殷人昆、田金兰编著,机械工业出版社。
这本书也是一本经典的数据结构和算法教材,内容深入浅出,易于理解。
它涵盖了考研数据结构的大部分知识点,并且有丰富的实例和练习题。
5. 《考研数学(一)历年真题详解与标准解答》——杨超主编,高等教育出版社。
虽然这本书不是专门针对数据结构的教材,但是它包含了大量的历年真题和标准答案,对于考研生来说非常有价值。
通过做真题和看标准答案,可以更好地了解考研的出题方式和评分标准。
以上是一些建议的考研参考书,希望能对你有所帮助。
同时,也要注意多做真题和模拟题,加强自己的实战能力。
祝你考试顺利!。
数据结构课件PPT数组和广义表
{ q=1; for (col=1;col<=T.mu;++col) for(p=1;p<=M.tu;++p) if ( M.data[p].j==col ) { T.data[q].i=M.data[p].j; T.data[q].j=M.data[p].i; T.data[q].e=M.data[p].e; ++q; } }
(row) (col) (value)
[0] 1 4 22
[0] 1 5 91
[1] 1 7 15
[1] 2 2 11
[2] 2 2 11
[2] 3 6 28
[3] 2 [4] 3来自6 17 4 -6[3] 4 [4] 4
1 22 3 -6
[5] 4 6 39
[5] 6 2 17
[6] 5 1 91
[6] 6 4 39
cpot[1]=1 cpot[col]=cpot[col-1]+num[col-1]
稀疏矩阵的快速转置(算法5.2)
Status FastTransposeSMatrix(TSMatrix M,TSMatrix &T) { T.mu=M.nu; T.nu=M.mu; T.tu=M.tu;
if (T.tu) { for (col=1;col<=M.nu;++col) num[col]=0; for (t=1;t<=M.tu;++t) ++num[M.data[t].j]; cpot[1]=1; for ( col=2;col<=M.nu;++col) cpot[col]=cpot[col-1]+num[col-1]; for (p=1;p<=M.Tu;++p) { col=M.data[p].j; q=cpot[col]; T.data[q].i=M.data[p].j; T.data[q].j=M.data[p].i; T.data[q].e=M.data[p].e; ++cpot[col]; } }
数据结构数组和广义表
数据结构05数组与广义表数组与广义表可以看做是线性表地扩展,即数组与广义表地数据元素本身也是一种数据结构。
5.1 数组地基本概念5.2 数组地存储结构5.3 矩阵地压缩存储5.4 广义表地基本概念数组是由相同类型地一组数据元素组成地一个有限序列。
其数据元素通常也称为数组元素。
数组地每个数据元素都有一个序号,称为下标。
可以通过数组下标访问数据元素。
数据元素受n(n≥1)个线性关系地约束,每个数据元素在n个线性关系地序号 i1,i2,…,in称为该数据元素地下标,并称该数组为n维数组。
如下图是一个m行,n列地二维数组A矩阵任何一个元素都有两个下标,一个为行号,另一个为列号。
如aij表示第i行j列地数据元素。
数组也是一种线性数据结构,它可以看成是线性表地一种扩充。
一维数组可以看作是一个线性表,二维数组可以看作数据元素是一维数组(或线性表)地线性表,其一行或一列就是一个一维数组地数据元素。
如上例地二维数组既可表示成一个行向量地线性表: A1=(a11,a12,···,a1n)A2=(a21,a22, ···,a2n)A=(A1,A2, ···,Am) ············Am=(am1,am2, ···,amn)也可表示成一个列向量地线性表:B1=(a11,a21,···,am1)B2=(a12,a22, ···,am2)A=(B1,B2, ···,Bm) ············Bn=(a1n,a2n, ···,amn)数组地每个数据元素都与一组唯一地下标值对应。
数据结构05数组和广义表11
2021/11/8
12
设有m×n二维数组Amn,下面我们看按元素的下标求其 地址的计算:
以“行为主序”的分配为例:设数组的基址为LOC(a11), 每个数组元素占据l个地址单元,那么aij 的物理地址可用一 线性寻址函数计算:
LOC(aij) = LOC(a11) + ( (i-1)*n + j-1 ) * l 在C语言中,数组中每一维的下界定义为0,则:
(1) 取值操作:给定一组下标,读其对应的数据元素。
(2) 赋值操作:给定一组下标,存储或修改与其相对应的
数据元素。
我们着重研究二维和三维数组,因为它们的应用是广泛的,
尤其是二维数组。
2021/11/8
9
5.1.3 数组的存储结构
• 通常,数组在内存中被映象为向量,即用向量作为数组的 一种存储结构,这是因为内存的地址空间是一维的,数组的行 列固定后,通过一个映象函数,则可根据数组元素的下标得到 它的存储地址。
• 任一数据元素的存储地址可由公式算出:
Loc(a i,j)=loc(a 0,0)+(i*n+j)*L
– 以列序为主序的顺序存储
• 在以列序为主序的存储方式中,数组元素按列向量排列, 即第j+1个列向量紧接在第j个列向量之后, 把所有数组 元素顺序存放在一块连续的存储单元中。
• 任一数据元素的存储地址可由公式算出
–Loc(a i,j)=loc(a c1,c2)+[(j-c1)*(d1-c1+1)+(i-c1)]*L
2021/11/8
8
5.1.2 数组的基本操作
数组一旦被定义,它的维数和维界就不再改变。因此,除了 结构的初始化和销毁之外,数组的基本操作一般不会含有元素 的插入或删除等操作,数组只有访问数组元素和修改元素值的 操作。
数据结构(C语言版)(第2版)(2017年清华大学出版社出版
成书过程
修订过程
出版工作
该教材是根据教育部《高等学校计算机科学与技术专业公共核心知识体系与课程》编写的数据结构主教材。 该教材的编写得到清华大学2015年精品教材建设项目的资助。
教材目录
(注:目录排版顺序为从左列至右列 )
教学资源
该教材有配套教材——《数据结构精讲与习题详解(C语言版)(第2版)》。
作者简介
殷人昆,男,清华大学计算机系教授,1985年赴日本国东京理科大学做访问学者,研究方向为软件工程过程 的质量管理和软件产品的质量评价。主要教学工作为计算机系大学本科“数据结构”“软件工程”和研究生“软 件工程设计与技术”“软件项目管理”课程负责人,主持教育部微软精品课程“数据结构”的建设。
该教材的初稿完成于2015年12月,作为另一本教材《数据结构精讲与习题详解(第2版)》的写作参照,相 互补充,首先完成了《数据结构精讲与习题详解(第2版)》,再回过头来第二次修改该教材。
该教材修改部分包括:
2017年5月1日,该教材由清华大学出版社出版。
内容简介
全书共8章。第1章介绍数据结构的地位和主要知识点,数据结构和算法的基本概念和算法分析的简单方法, 以及C语言编程的要点。第2~8章分别介绍了线性表、栈和队列及其应用、多维数组、特殊矩阵、稀疏矩阵、字 符串和广义表、树与二叉树、图、查找、排序,并做了适当延伸。此外,附录还包含实训作业要求与样例(实训 作业要求和实训作业样例)、词汇索引。
感谢观看
数据结构 ( C语言版)唐国民版 表 示例
十字链表的建立
A=
0 0 0 0 0
1 0 4 0 0
0 2 0 0 0
0 3 0 0 0
0 0 5 0 6
hm
5
5
0
0
0
0
0
0
0
0
0
0
0
0
0
1 1
0
0
1 2
2
1 3
3
0
0
2
1
4
2 4
5
0
0
0
0
4 4
6
用十字链表实现稀疏矩阵相加运算
假设原来有两个稀疏矩阵A和B,如何实现运算A=A+B呢?假 设原来A和B都用十字链表作存储结构,现要求将B中结点合 并到A中,合并后的结果有三种可能: 1)结果为aij+bij; 2)aij(bij=0); 3)bij(aij=0)。 由此可知当将B加到A中去时,对A矩阵的十字链表来说, 1)结点的v域值(aij+bij≠0), 2)不变(bij=0), 3)插入一个新结点(aij=0), 4) 是删除一个结点(aij+bij=0)。
输入格式
• 广义表由键盘输入,全部为字母,输入 格式为:元素之间用逗号分隔,表元素 的起始符号分别为左右圆括号,空表在 其圆括号内用“#”表示,最后用分号作 为整个广义表的结束;
• 假定LS=(a,(),b,C(d,(e))),则从键盘输入为: • (a,(#),b,C(d,(e))); • 链表建立算法:关键是对存储结构中的 各个域进行赋值;
十字链表的建立
(1)建立表头的循环链表:
a.依次输入矩阵的行、列数和非零元素个数:m,n和t。 b.行、列链表共享一组表头结点,因此,表头结点的个数应该是矩阵中行、 列数中较大的一个。假设用s 表示个数,即s=max(m,n)。 c.依次建立总表头结点(由hm指针指向)和s个行、列表头结点,并使用 next域使s+1个头结点组成一个循环链表,总表头结点的行、列域分别为 稀疏矩阵的行、列数目,s个表头结点的行列域分别为0。并且开始时, 每一个行、列链表均是一个空的循环链表,即s个行、列表头结点中的行 、列指针域rptr和cptr均指向头结点本身。
四川大学数据结构第5章 数组和广义表
4. 稀疏矩阵的存储方式
稀疏矩阵的顺序压缩存储
三元组表示法
稀疏矩阵的链式压缩存储 十字链表
2014年1月20日星期一 数据结构与算法(C++版), 清华大学出版社 第23页
(1)三元组顺序表
当稀疏矩阵的阶很高时,如采用一 般矩阵的存储方法将浪费大量的存 储空间。 一种直观、常用的方法是,对每个 非零元素,用三元组(行号,列号, 元素值)来表示,这样每个元素的 信息就全部记录下来了。
2014年1月20日星期一
数据结构与算法(C++版), 清华大学出版社
第28页
public: // 抽象数据类型方法声明及重载编译系统默认方法声明: TriSparseMatrix(int rs = DEFAULT_SIZE, int cs = DEFAULT_SIZE, int size = DEFAULT_SIZE); // 构造一个rs行cs列非零元素最大个数为size // 的空稀疏矩阵 ~TriSparseMatrix(); // 析构函数 int GetRows() const; // 返回稀疏矩阵行数 int GetCols() const; // 返回稀疏矩阵列数 int GetNum() const; // 返回稀疏矩阵非零元个数 StatusCode SetElem(int r, int c, const ElemType &v); // 设置指定位置的元素值 StatusCode GetElem(int r, int c, ElemType &v); // 求指定位置的元素值 TriSparseMatrix<ElemType> &operator =(const TriSparseMatrix<ElemType> ©);// 赋值 …… };
数据结构课后题答案
数据结构(C语言版)(第2版)课后习题答案冬梅2015.3目录第1章绪论 (1)第2章线性表 (5)第3章栈和队列 (13)第4章串、数组和广义表 (26)第5章树和二叉树 (33)第6章图 (43)第7章查找 (55)第8章排序 (66)第1章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。
如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。
数据元素:是数据的基本单位,在计算机常作为一个整体进行考虑和处理。
在有些情况下,数据元素也称为元素、结点、记录等。
数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
例如,学生基本信息表中的学号、姓名、性别等都是数据项。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
例如:整数数据对象是集合N={0,±1,±2,…},字母字符数据对象是集合C={‘A’,‘B’,…,‘Z’,‘a’,‘b’,…,‘z’},学生基本信息表也可是一个数据对象。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。
逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。
存储结构:数据对象在计算机中的存储表示,也称为物理结构。
抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。
具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LLoocc((aaij)ij=)L=Loco(ca(a111)1+)[+([j(-i1-)1*)mn++((ji--11))]]**lL
mm**nn--11
a11 a12 ……
a1n a21 a22 …..
a2n ……
am1 am2 …….
amn
第 章 数组和广义表
三维数组(下标从0开始)
各维元素个数为 m1, m2, m3 下标为 i1,i2,i3的数组元素的存储地址:
0 0 0 0 an1n2 an1n1
01 2 3 4 5 6 7 8 9
10
B a00 a01 a10 a11 a12 a21 a22 a23 … an-1n-2 an-1n-1
下 三 角
01 2 3 4 5 6 7 8
n(n+1)/2-1
B a00 a10 a11 a20 a21 a22 a30 a31 a32 …… an-1n-1
第 章 数组和广义表
若 i j, 数组元素A[i][j]在数组B中的存放位置 为 1 + 2 + + i + j = (i + 1)* i / 2 + j
(a21
a22
... ... a2n)
( ... ... ... ... amn)
(
(
(
(
(
数组特点
数组结构固定
数据元素同构
数组运算
给定一组下标,存取相应的数据元素
给定一组下标,修改数据元素的值
第 章 数组和广义表
第 章 数组和广义表
第 章 数组和广义表
a13 a23 a33
三 角 矩 阵
01 2 3 4 5 6 7 8 9
B a00 a01 a02 a03 a11 a12 a13 a22 a23 a33
若i j,数组元素A[i][j]在数组B中的存放位置 为n + (n-1) + (n-2) + + (n-i+1) + j-i
第 章 数组和广义表
对于上三角矩阵
若 i j,数组元素A[i][j]在数组B中的存放位置为 n + (n-1) + (n-2) + + (n-i+1) + j-i = = (2*n-i+1) * i / 2 + j-i = = (2*n-i-1) * i / 2 + j
若i > j,数组元素A[i][j]在矩阵的下三角部分,在 数组 B 中没有存放。因此,找它的对称元素A[j][i]。
(按页/行/列存放)
LOC ( i1, i2, i3 ) = a + ( i1* m2 * m3 + i2* m3 + i3 ) * l
第 章 数组和广义表
n 维数组
各维元素个数为 m1, m2, m3, …, mn 下标为 i1, i2, i3, …, in 的数组元素
的存储地址:
LOC ( i1, i2, …, in ) = a + ( i1*m2*m3*…*mn + i2*m3*m4*…*mn+ + ……+ in-1*mn + in ) * l
第 章 数组和广义表
第五章 数组
数组的类型定义和表示方法 特殊矩阵和稀疏矩阵存储方法 及运算的实现 广义表的结构特点
第 章 数组和广义表
数组可以看成是一种特殊的线性表,即线性表 中数据元素本身也是一个线性表
5.1.1 二维数组的定义
定义
)
)
)
(a11 a12 ... ... a1n)
)
)
Amn
a12
a22 an12
a1n1
a2n1 an1n1
对 称 阵 下 三 角 矩 阵
第 章 数组和广义表
a00
a01
a02
a0n1
对 称
A=
aaan120010
a11
a21 an11
a12
a22 an12
a1n1
a2n1 an1n1
阵 的 上 三 角 矩 阵
把它们按行存放于一个一维数组 B 中,称之为 对称矩阵 A 的压缩存储方式。
数组 B 共有 n + ( n - 1 ) + + 1 = n*(n+1)/2 个元素。
第 章 数组和广义表
对称矩阵的存储 在矩阵中,aij = aji
a00 a01 a02 a0n1
存
A aaan120010
a11
a21 an11
a12
a22 an12
a1n1
a2n1 an1n1
A[j][i]在数组 B 的第 (2*n-j-1) * j / 2 + i 的位置中找 到。
第 章 数组和广义表
三角矩阵 下标从1开始
a11 0 0 …….. 0 a21 a22 0 …….. 0
按行序为主序: j>i 时aij为0
…………………. 0 an1 an2 an3…….. ann
a11 a21 a22 a31 a32 …... an1 …... ann
k=0 1 2 3 4
n(n-1)/2 n(n+1)/2-1
Loc(aij)=Loc(a11)+[(
i(i-1) 2
+(j-1)]*L
第 章 数组和广义表
三对角矩阵的压缩存储
a00 a01 0 0
0
0
A a0010
a11
a21 0
a12
a22 0
0
a23 an2n3
0
0 an2n2
0
0
an2n1
5.1.2 数组的顺序存储结构 0
次按二序行维约序数定为组主按序列存序放为
1
主序 以存行放序(为下主标序从1开始)
以列序为主序
L为每一个数组元素所占的存储单元个数
n-1
n
aaaa21211111
aaaa21212222
………….... …………....
a1anaa221nnn
…………………………. ……. aamm11 aamm22 ………….... aammnn
前i行元素总数 第i行第j个元素前元素个数
若 i < j,数组元素 A[i][j] 在矩阵的上三角部 分, 在数组 B 中没有存放,可以找它的对称元 素 A[j][i]= j *(j +1) / 2 + i
第 章 数组和广义表
a00 a01 a02 a03 上
n=4
aaa132000
a11 a12 a21 a22 a31 a32
n1
n
a i j mk in *l
j1
k j 1
第 章 数组和广义表
5.2.1 特殊矩阵
为节约存储,只存对角线及对角线以上的元素, 或者只存对角线及对角线以下的元素。前者称为 上三角矩阵,后者称为下三角矩阵。
a00 a01 a02 a0n1
aaan120010
a11
a21 an11