数据结构 耿国华 西北大学 7-2图的存储结构

合集下载

《数据结构(C语言-耿国华版)》复习大纲

《数据结构(C语言-耿国华版)》复习大纲

第一章绪论1.数据:人们利用文字符号、数字符号及其他规定的符号对现实世界的事物及其活动的描述。

凡是能被计算机输入、存储、处理和输出的一切信息都叫数据。

2.数据元素:数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。

数据元素的组成:一个数据元素通常由一个或若干数据项组成。

数据项:指具有独立含义的最小标识单位。

3.数据对象:性质相同的数据元素的集合,是数据的一个子集。

4.数据结构:研究的是数据的逻辑结构和物理结构,以及它们之间的相互关系和所定义的算法在计算机上运行的学科。

5.算法:是对待定问题求解步骤的一种描述,是指令的有限序列。

算法应满足以下性质:1)输入性:具有零个或若干个输入量;2)输出性:至少产生一个输出;3)有穷性:每条指令的执行次数是有限的;4)确定性:每条指令的含义明确,无二义性;5)可行性:每条指令都应在有限的时间内完成。

6.评价算法优劣的主要指标:1)执行算法后,计算机运行所消耗的时间,即所需的机器时间;2)执行算法时,计算机所占存储量的大小,即所需的存储空间;3)所设计的算法是否易读、易懂,是否容易转换成其他可运行的程序语言。

7.会估算某一算法的总执行时间和时间复杂度。

8.熟悉习题P32:3(5)-(9)、4(2)(3)第二章线性表1.线性表(P7):是性质相同的一组数据元素序列。

线性表的特性:1)数据元素在线性表中是连续的,表中数据元素的个数可以增加或减少,但调整后数据元素仍必须是连续的,即线性表是一种线性结构。

2)数据元素在线性表中的位置仅取决于自己在表中的序号,并由该元素数据项中的关键字(key)加以标识。

3)线性表中所有数据元素的同一数据项,其属性是相同的,数据类型也是一致的。

线性表的主要运算有:插入、删除、查找、存取、长度、排序、复制、合并。

线性表的顺序存储结构及特点(就是把表中相邻的数据元素存放在内存邻接的存储单元,这种存储方法叫做顺序分配,又称顺序映像。

《数据结构》课程教学大纲(卓越班)

《数据结构》课程教学大纲(卓越班)

课程编号:()《数据结构》课程教学大纲(Date Structure)总学时:(64)学分:(3)一、课程简介:1、课程性质:专业基础课2、开课学期:第三学期3、适用专业:电子信息工程卓越班4、课程修读条件:学生在学习本课程之前应当先学《C语言程序设计》,若具有离散数学和概率论的知识则能更好理解本课程中的某些内容。

5、课程教学目的:本课程是关于数据结构知识的一门课程,为我院电子信息工程本科专业卓越班方向专业基础课。

通过本课程的学习,使学生学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻辑结构、存储结构及其相应的算法,并初步掌握算法的时间分析和空间分析的技术,培养学生的数据抽象能力,引导学生数据类型的使用,为今后学习程序设计、嵌入式系统、设备驱动开发等作一些铺垫。

二、教学基本要求或建议:全程以多媒体教学为主,理论联系实际应用,通过实验来理解理论知识。

三、内容纲目及标准:(一)理论部分学时数(48)第一章绪论[教学目的] 掌握数据、数据结构和算法的基本概念;了解算法的描述;掌握算法的时间和空间分析。

[教学重点与难点]算法分析第一节引言第二节基本概念和术语第三节算法描述第四节算法分析第二章线性表[教学目的] 掌握线性表的逻辑结构;了解线性表的基本操作和顺序存储结构;掌握插入、删除和定位等操作在顺序表上的实现,掌握线性表的链式存储结构。

[教学重点与难点] 基本操作在顺序表上的实现,单、双链表第一节线性表及其逻辑结构第二节线性表的顺序存储结构第三节线性表的链式存储结构第四节线性表的应用第五节有序表第三章栈和队列[教学目的] 了解栈和队列的概念;掌握栈和队列的存储结构。

[教学重点与难点]栈和队列的存储结构第一节栈第二节队列第四章串[教学目的] 掌握串的基本操作;了解串的存储结构。

[教学重点与难点]串的模式匹配第一节串的基本概念第二节串的存储结构第三节串的模式匹配第五章递归[教学目的] 掌握递归的概念和实现原理;了解递归算法的设计。

数据结构-C语言描述(耿国华主编)教案

数据结构-C语言描述(耿国华主编)教案

西安文理学院精品课《数据结构》教案计算机科学系韩利凯《数据结构》第一章绪论[教学目标]掌握数据结构的定义、内容、方法、描述、评价。

[重点、难点]数据结构的研究范围,研究采用的方法,算法规则描述的工具,对算法作性能评价。

[教学方法]用多媒体课件( ppt )以及与生活实例相结合等方法讲授,这样便于描述相关概念及学生记笔记,加深他们的印象,使基础知识掌握地比较牢固。

[学习要点]1. 熟悉各名词、术语的含义,掌握基本概念,特别是数据的逻辑结构和存储结构之间的关系。

分清哪些是逻辑结构的性质,哪些是存储结构的性质。

2. 了解抽象数据类型的定义、表示和实现方法。

3.理解算法五个要素的确切含义:①动态有穷性(能执行结束);②确定性(对于相同的输入执行相同的路径);③有输入;④有输出;⑤可行性(用以描述算法的操作都是足够基本的)。

4.掌握计算语句频度和估算算法时间复杂度的方法。

1.1 什么是数据结构(定义)首先介绍数据结构的相关名词。

1.数据(Data)数据是描述客观事物的数值、字符以及能输入机器且能被处理的各种符号集合。

2.数据元素(Data Element)数据元素是组成数据的基本单位 ,是数据集合的个体,在计算机中通常作为一个整体进行考虑和处理。

例如:学生登记表是数据,每一个学生的记录就是一个数据元素。

3.数据对象(Data Object)数据对象是性质相同的数据元素的集合,是数据的一个子集。

4.数据结构(DA TA Structure)数据结构是指相互之间存在一种或多种特定关系的数据元素集合,是带有结构的数据元素的集合,它指的是数据元素之间的相互关系,即数据的组织形式。

5.数据类型(Data Type)数据类型是一组性质相同的值集合以及定义在这个值集合上的一组操作的总称。

6.数据抽象与抽象数据类型1)数据的抽象高级语言中提供整型、实型、字符、记录、文件、指针等多种数据类型,可以利用这些类型构造出象栈、队列、树、图等复杂的抽象数据类型。

数据结构 耿国华精品PPT课件

数据结构  耿国华精品PPT课件
类语言:
类语言是接近于高级语言而又不是严格的高级语言, 具有高级语言的一般语句设施,撇掉语言中的细节, 以便把注意力主要集中在算法处理步骤本身的描述 上。
29.11.2020
30
对C语言作以下描述:
3.赋值语句 (1)简单赋值
1)〈变量名〉=〈表达式〉 2) 〈变量〉++,
3) 〈变量〉- -,
及定义在这个值集合上的一组操作的总称。
如在高级语言中,整型类型的取值范围为: -32768~+32767,运算符集合为加、减、乘、除、 取模,即+、-、*、/、%。
29.11.2020
9
数据类型(Data Type)
高级语言中的数据类型分为两大类:
1.原子类型,其值不可分解。如C语言中的标准类 型(整型、实型、字符型、)。
29.11.2020
1
第1章 绪 论
1.1 数据结构的基本概念(定义) 1.2 数据结构的内容(研究范围) 1.3 算法设计 1.4 算法描述工具 1.5 对算法作性能评价 1.6 数据结构与C语言表示
●1.7 关于学习数据结构
29.11.2020
2
1.1 数据结构的基本概念(定义)
数据结构的相关名词: 数据(Data) 数据元素(Data Element) 数据对象(Data Object) 数据结构(Data Structure) 数据类型(Data Type) 数据抽象与抽象数据类型
4
数据元素(Data Element)
定义:
数据元素是组成数据的基本单位 ,是数据 集合的个体,在计算机中通常作为一个整体进 行考虑和处理。例如:
数据项
学 号 姓 名 性 别 籍 贯 出生年月 住 址

西北大学计算机专硕研究生入学考试历年真题图文稿

西北大学计算机专硕研究生入学考试历年真题图文稿

西北大学计算机专硕研究生入学考试历年真题集团文件发布号:(9816-UATWW-MWUB-WUNN-INNUL-DQQTY-西北大学2015年招收攻读硕士学位研究生试题(回忆版) 科目名称:数据结构科目代码:851适用专业:计算机技术、软件工程共2页答案请答在答题纸上,答在本试题上的答案一律无效。

一、简答 [每小题6分,共30分]1、简述四类基本的数据逻辑关系,并用图表示。

2、简述数组、广义表属于线性表原因。

3、算法的定义及特性。

4、什么是平衡二叉排序树平衡因子的取值范围是什么5、简述稳定排序含义,给出两种稳定排序方法以及两种不稳定排序方法名称并证明。

二、分析与方法选择 [每小题10分,共30分]1、折半查找法对待查找的列表哪两个要求?答:必须采用顺序存储结构;必须按关键字大小有序排列。

2、分析快速排序的性能(最好情况、最坏情况)。

3、关于二叉树结点度数的计算。

(牢记二叉树的5条性质,会计算二叉树及K叉树相关的计算。

)三、构造结果 [每小题8分,共40分]1、已知一棵二叉树的前序序列及后序序列,给出其对应的二叉树。

备注:西大历年试卷都是给出前序序列、中序序列或者中序序列、后序序列,写出对应的二叉树,这种题型很好做,且结果给出的二叉树唯一。

但是2015年试题给出的是已知前序序列、后序序列,求对应的二叉树,这题我们平时几乎都没做过,但是其实也不难,往往给出前序序列、后序序列,构造的二叉树不是唯一的,但是这次考题设置的巧妙,最后给出的结果二叉树应该是唯一的。

这道题具体我也不记得了,反正有点难,我也花了很长时间最后才做出来的。

2、图的两种存储结构及表示、深度优先搜索遍历、广度优先搜索遍历、最小生成树的生成。

3、依次输入(26,30,15,10,28,19,18,22),构造二叉排序树,并计算等概率情况下的查找成功的平均查找长度。

4、画出10个元素的折半判定树,并计算等概率情况下查找成功的平均查找长度。

5、最小生成树生成的两种算法:普里姆算法、克鲁斯卡尔算法。

数据结构(C++版)第7章 图-2

数据结构(C++版)第7章  图-2
第7章 图
第6章 树与二叉树
第2讲
1
本章分为(4~5)讲
第1讲 7.1 图的基本概念 7.2 图的存储结构 -7.2.1
供教师参考
第2讲 7.4 图的存储结构-7.2.2, 7.2.3, 7.2.4 7.3 图的遍历与连通性
第 3讲
7.4 图的最小生成树 7.5 最短路径 第4讲 7接表信息
void AdjTWGraph::PrintOut() { Edge *pre,*curr; for ( int i=0; i<numV; i++ ) { cout<<"\n 顶点编号、它的邻接点编号和边的权值:"; cout<<" "<<i+1<<" "<<Vertices[i].data; curr=Vertices[i].adj; //找顶点vi的邻接边 while ( curr!=NULL ) {cout<<" v"<<curr->dest<<" w"<<curr->weight; curr=curr->next; } cout<<endl; }// for }
15
有向图的正邻接表
在无向图的邻接表中,求顶点v的度比 较方便,只要遍历第v条链表,统计该链表 中边结点的个数便可得到顶点v的度。 有向图的正邻接表中,第v条链表是由 以顶点v为弧尾的若干条弧的弧结点组成, 每个弧结点的dest域是该条弧的弧头结点 在图中的位置(顶点在数组中的下标)。第 v条链表中弧结点的个数就是顶点v的出度。
8

数据结构(1,2,3章)课后题答案

数据结构(1,2,3章)课后题答案

西北大学可视化技术研究所

1.3填空题: (1)变量的作用域是指 变量的有效范围 (2)抽象数据类型具有 数据抽象 、 信息隐 蔽 的特点。 (3)一种抽象类型包括 数据对象 、 结构 关系 和 基本操作 。
西北大学可视化技术研究所
(4)当需要用一个形式参数直接改变对应实参 的值时,该形式参数应说明为 指针类型 。 (5)数据结构的逻辑结构分为 集合结构 、 线性结构 、 树形结构 和 图结构 四种。 (6)数据结构的存储结构分为 顺序存储结构 和 链式存储结构 两种。
1.4 选择题 (1)若需要利用形式参数直接访问修改实参值, 则应将形参说明为 A 参数。
A.指针
B.值参数
西北大学可视化技术研究所
(2)执行下面的程序段的时间复杂度为 for(int i=0;i<m;i++) for(int j=0;j<n;j++) a[i][j]=i*j; A.O(m2) B. O(n2) C. O(m*n)
8.假设两个按元素值递增有序排列的线性 表A和B,均以单链表作为存储结构,请 编写算法,将A表和B表归并成一个按元 素值递减有序排列的线性表C,并要求利 用原表(即A表和B表的)结点空间存放 表C。
西北大学可视化技术研究所

算法描述:要求利用现有的表A和B中的结 点空间来建立新表C,可通过更改结点的next 域来重新建立新的元素之间的线性关系。为保 证新表递减有序可以利用头插法建立单链表的 方法,只是新建表中的结点不用malloc,而只 需要从A和B中选择合适的点插入到新表C中即 可。
数据结构课后部分习题 答案提示
授课教师:耿国华 教授
西北大学可视化技术研究所
第一章:绪论

数据结构 耿国华 西北大学 7-9最短路径问题-迪杰斯特拉算法

数据结构 耿国华 西北大学 7-9最短路径问题-迪杰斯特拉算法

例:
5
99
0
30
顶点0到各点的最短路径
60

4点
第二次
1
10
10
20
1
2
5 2 50 3
3
∞ 10(0-2) 60(0∞-2-3)
带权有向图
4
已求出最短路径的终点的集合
S={ 1 2 3 4 5 }
5
30(0-4) 99(0-5)
例:
5
99
0
30
顶点0到各点的最短路径
60

4点
第三次
1
10
10
20
它或者是直接从源点到该点(只含一条弧); 或者 5 是从源点经过已求得最短路径的顶点,再到达该顶点。
例:
5
99
0
30
顶点0到各点的最短路径
60

4点
第一次
1
10
10
20
1
2
5 2 50 3
3
∞ 10(0-2)

带权有向图
4
已求出最短路径的终点的集合
S={ 1 2 3 4 5 }
5
30(0-4) 99(0-5)
第7章 图
7.9最短路径问题—迪杰斯特拉算法
求某一顶点到其余各顶点的最短路径
迪杰斯特拉算法的实现 1) 存储结构
(1) 带权邻接矩阵数组g.arcs :
用g.arcs [i][j]表示弧<vi, vj>上的权。
(2) 顶点分为两组: S,V-S
S中存放已求得最短路径的终点的集合。
(3) 辅助一维数组dist:
若vi∈S ,dist[i] 表示源点到vi的最短路径长度

数据结构---C语言描述-(耿国华)-课后习题答案

数据结构---C语言描述-(耿国华)-课后习题答案

第一章习题答案2、××√3、(1)包含改变量定义的最小范围(2)数据抽象、信息隐蔽(3)数据对象、对象间的关系、一组处理数据的操作(4)指针类型(5)集合结构、线性结构、树形结构、图状结构(6)顺序存储、非顺序存储(7)一对一、一对多、多对多(8)一系列的操作(9)有限性、输入、可行性4、(1)A(2)C(3)C5、语句频度为1+(1+2)+(1+2+3)+…+(1+2+3+…+n)第二章习题答案1、(1)一半,插入、删除的位置(2)顺序和链式,显示,隐式(3)一定,不一定(4)头指针,头结点的指针域,其前驱的指针域2、(1)A(2)A:E、AB:H、L、I、E、AC:F、MD:L、J、A、G或J、A、G(3)D(4)D(5)C(6)A、C3、头指针:指向整个链表首地址的指针,标示着整个单链表的开始。

头结点:为了操作方便,可以在单链表的第一个结点之前附设一个结点,该结点的数据域可以存储一些关于线性表长度的附加信息,也可以什么都不存。

首元素结点:线性表中的第一个结点成为首元素结点。

4、算法如下:int Linser(SeqList *L,int X){ int i=0,k;if(L->last>=MAXSIZE-1){ printf(“表已满无法插入”);return(0);}while(i<=L->last&&L->elem[i]<X)i++;for(k=L->last;k>=I;k--)L->elem[k+1]=L->elem[k];L->elem[i]=X;L->last++;return(1);}5、算法如下:#define OK 1#define ERROR 0Int LDel(Seqlist *L,int i,int k){ int j;if(i<1||(i+k)>(L->last+2)){ printf(“输入的i,k值不合法”);return ERROR;}if((i+k)==(L->last+2)){ L->last=i-2;ruturn OK;}else{for(j=i+k-1;j<=L->last;j++)elem[j-k]=elem[j];L->last=L->last-k;return OK;}}6、算法如下:#define OK 1#define ERROR 0Int Delet(LInkList L,int mink,int maxk){ Node *p,*q;p=L;while(p->next!=NULL)p=p->next;if(mink<maxk||(L->next->data>=mink)||(p->data<=maxk)) { printf(“参数不合法”);return ERROR;}else{ p=L;while(p->next-data<=mink)p=p->next;while(q->data<maxk){ p->next=q->next;free(q);q=p->next;}return OK;}}9、算法如下:int Dele(Node *S){ Node *p;P=s->next;If(p= =s){printf(“只有一个结点,不删除”);return 0;}else{if((p->next= =s){s->next=s;free(p);return 1;}Else{ while(p->next->next!=s)P=p->next;P->next=s;Free(p);return 1;}}}第三章习题答案2、(1)3、栈有顺序栈和链栈两种存储结构。

数据结构部分课后习题答案(耿国华)

数据结构部分课后习题答案(耿国华)

第一章绪论一、问答题1.什么是数据结构?2.叙述四类基本数据结构的名称与含义。

3.叙述算法的定义与特性。

4.叙述算法的时间复杂度。

5.叙述数据类型的概念。

6.叙述线性结构与非线性结构的差别。

7.叙述面向对象程序设计语言的特点。

8.在面向对象程序设计中,类的作用是什么?9.叙述参数传递的主要方式及特点。

10.叙述抽象数据类型的概念。

二、判断题(在各题后填写“√”或“×”)1.线性结构只能用顺序结构来存放,非线性结构只能用非顺序结构来存放。

()2.算法就是程序。

()3.在高级语言(如C或PASCAL)中,指针类型是原子类型。

()三、计算下列程序段中X=X+1的语句频度for(i=1;i<=n;i++)for(j=1;j<=i;j++)for(k=1;k<=j;k++)x=x+1;【解答】i=1时:1 = (1+1)×1/2 = (1+12)/2i=2时:1+2 = (1+2)×2/2 = (2+22)/2i=3时:1+2+3 = (1+3)×3/2 = (3+32)/2…i=n时:1+2+3+……+n = (1+n)×n/2 = (n+n2)/2x=x+1的语句频度为:f(n) = [ (1+2+3+……+n) + (12 + 22 + 32 + …… + n2 ) ] / 2=[ (1+n)×n/2 + n(n+1)(2n+1)/6 ] / 2=n(n+1)(n+2)/6=n3/6+n2/2+n/3区分语句频度和算法复杂度:O(f(n)) = O(n3)四、试编写算法,求一元多项式P n(x)=a0+a1x+a2x2+a3x3+…a n x n的值P n(x0),并确定算法中的每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数。

注意:本题中的输入a i(i=0,1,…,n),x和n,输出为P n(x0)。

耿国华数据结构习题答案全面版

耿国华数据结构习题答案全面版

1.3计算下列程序中x=x+1的语句频度for(i=1;i<=n;i++)for(j=1;j<=i;j++)for(k=1;k<=j;k++)x=x+1;【解答】x=x+1的语句频度为:T(n)=1+(1+2)+(1+2+3)+……+(1+2+……+n)=n(n+1)(n+2)/61. 4试编写算法,求p n(x)=a0+a1x+a2x2+…….+a n x n的值p n(x0),并确定算法中每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数。

注意:本题中的输入为a i(i=0,1,…n)、x和n,输出为P n(x0)。

算法的输入和输出采用下列方法(1)通过参数表中的参数显式传递(2)通过全局变量隐式传递。

讨论两种方法的优缺点,并在算法中以你认为较好的一种实现输入输出。

【解答】(1)通过参数表中的参数显式传递优点:当没有调用函数时,不占用内存,调用结束后形参被释放,实参维持,函数通用性强,移置性强。

缺点:形参须与实参对应,且返回值数量有限。

(2)通过全局变量隐式传递优点:减少实参与形参的个数,从而减少内存空间以及传递数据时的时间消耗缺点:函数通用性降低,移植性差算法如下:通过全局变量隐式传递参数PolyValue(){ int i,n;float x,a[],p;printf(“\nn=”);scanf(“%f”,&n);printf(“\nx=”);scanf(“%f”,&x);for(i=0;i<n;i++)scanf(“%f ”,&a[i]); /*执行次数:n次*/p=a[0];for(i=1;i<=n;i++){ p=p+a[i]*x; /*执行次数:n次*/x=x*x;}printf(“%f”,p);}算法的时间复杂度:T(n)=O(n)通过参数表中的参数显式传递float PolyValue(float a[ ], float x, int n){float p,s;int i;p=x;s=a[0];for(i=1;i<=n;i++){s=s+a[i]*p; /*执行次数:n次*/p=p*x;}return(p);}算法的时间复杂度:T(n)=O(n)2.7试分别以不同的存储结构实现单线表的就地逆置算法,即在原表的存储空间将线性表(a1,a2,…,a n)逆置为(a n,a n-1,…,a1)。

耿国华数据结构习题答案完整版

耿国华数据结构习题答案完整版

Hanoi(1,B,C,A) move(B->A) 1 号搬到 A
Move(B->C)
2 号搬到 C
Hanoi(1,A,B,C) move(A->C) 1 号搬到 C
第四章答案
设 s=’I AM A STUDENT’,t=’GOOD’, q=’WORKER’。给出下列操作的结果:
【解答】StrLength(s)=14;
第一章答案 计算下列程序中 x=x+1 的语句频度
for(i=1;i<=n;i++) for(j=1;j<=i;j++)
for(k=1;k<=j;k++) x=x+1;
【解答】x=x+1 的语句频度为: T(n)=1+(1+2)+(1+2+3)+……+(1+2+……+n)=n(n+1)(n+2)/6
缺点:函数通用性降低,移植性差
算法如下:通过全局变量隐式传递参数
PolyValue()
{ int i,n;
float x,a[],p;
printf(“\nn=”);
scanf(“%f”,&n);
printf(“\nx=”);
scanf(“%f”,&x);
for(i=0;i<n;i++)
scanf(“%f ”,&a[i]); /*执行次数:n 次 */
case >0:
/*串 T 的长度大于串 V 的长度*/
for(i=pos+;i<S->len;i--)
/*将 S 中子串 T 后的所有字符

数据结构-C语言描述(第二版)(耿国华)章 (2)

数据结构-C语言描述(第二版)(耿国华)章 (2)
第2章 线 性 表 第2章 线性表
2.1 线性表的概念及运算 2.2 线性表的顺序存储 2.3 线性表的链式存储 2.4 一元多项式的表示及相加
第2章 线 性 表 2.1 线性表的概念及运算
2.1.1 线性表的逻辑结构 线性表是n个类型相同的数据元素的有限序列,数据元素之
间是一对一的关系,即每个数据元素最多有一个直接前驱和一 个直接后继,如图2.1所示。例如:英文字母表(A,B,…, Z)就是一个简单的线性表,表中的每一个英文字母是一个数据 元素,每个元素之间存在唯一的顺序关系,如在英文字母表字 母B的前面是字母A,而字母B的后面是字母C。在较为复杂的线 性表中,数据元素(data elements)可由若干数据项组成,如 学生成绩表中,每个学生及其各科成绩是一个数据元素,它由 学号、姓名、各科成绩及平均成绩等数据项(item组成,常被称 为一个记录(record) ,含有大量记录的线性表称为文件(file)。 数据对象(dataobject)是性质相同的数据元素集合。
第2章 线 性 表
假设线性表中有n个元素,每个元素占k个单元,第 一个元素的地址为loc(a1),则可以通过如下公式计算出第i 个元素的地址loc(a -i):
loc(ai) =loc(a1)+(i-1)×k 其中loc(a -2.2 顺序表存储示意图
第2章 线 性 表
操作前提: 1≤i≤ListLength(L)。
表L已存在且非空,
操作结果: 删除L的第i个数据元素, 并用e返回其值, L的长度减1。
} ADT LinearList
第2章 线 性 表 2.2 线性表的顺序存储
2.2.1 线性表的顺序存储结构
线性表的顺序存储是指用一组地址连续的存储单元依 次存储线性表中的各个元素,使得线性表中在逻辑结构 上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元 素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系。 采用顺序存储结构的线性表通常称为顺序表。

数据结构(1-2-3章)课后题答案解析

数据结构(1-2-3章)课后题答案解析
西北大学可视化技术研究所
q=p; p=p->next; b->next=q; q->next=B; b=b->next; } else {//分出其他字符结点 q=p; p=p->next; c->next=q; q->next=C; c=c->next; } } }//结束
西北大学可视化技术研究所
A.双向链表
B.双向循环链表
C.单向循环链表 D.顺序表
(4)下列选项中, D 项是链表不具有的特点。
A.插入和删除运算不需要移动元素
B.所需要的存储空间与线性表的长度成正比
C.不必事先估计存储空间大小
D.可以随机访问表中的任意元素
西北大学可视化技术研究所
(5)在链表中最常用的操作是删除表中最后一个结点和 在最后一个结点之后插入元素,则采用 C 最 节省时间。
西北大学可视化技术研究所
8.假设两个按元素值递增有序排列的线性 表A和B,均以单链表作为存储结构,请 编写算法,将A表和B表归并成一个按元 素值递减有序排列的线性表C,并要求利 用原表(即A表和B表的)结点空间存放 表C。
西北大学可视化技术研究所
算法描述:要求利用现有的表A和B中的结 点空间来建立新表C,可通过更改结点的next 域来重新建立新的元素之间的线性关系。为保 证新表递减有序可以利用头插法建立单链表的 方法,只是新建表中的结点不用malloc,而只 需要从A和B中选择合适的点插入到新表C中即 可。
西北大学可视化技术研究所
1.3填空题: (1)变量的作用域是指 变量的有效范围 (2)抽象数据类型具有 数据抽象 、 信息隐 蔽 的特点。 (3)一种抽象类型包括 数据对象 、 结构 关系 和 基本操作 。

耿国华数据结构各章知识点纲要

耿国华数据结构各章知识点纲要

第1章绪论1.基本概念:数据、数据元素、数据项、抽象数据类型2.数据的逻辑结构:集合结构、线性结构、树型结构、图形结构3.数据的存储结构:顺序存储、链式存储4.数据相关的运算集合(随具体应用而不同)5.算法:定义、算法的分析6.本章重点和难点(1)抽象数据类型(2)算法的时间复杂度的分析第2章线性表1.线性表的概念2.顺序表的概念、类型构造、基本运算3.链表的概念、类型构造、基本运算4.顺序表与链表各自的特点、适用场合5.一元多项式的表示和处理6.本章重点难点(1)顺序表的插入、删除等基本运算(2)单链表的插入、删除等基本运算(3)循环链表、双向链表的基本运算(4)链式存储表示的一元多项式的运算第3章栈和队列1.栈:(1)栈的定义、特点(2)顺序栈及基本运算的实现、两栈共享技术(3)链栈及基本运算的实现(注意指针的方向)2.队列:(1)队列的定义、特点(2)循环队列及基本运算的实现(3)链队列及基本运算的实现3.本章重点难点:(1)栈的应用(基于栈的表达式括号匹配检验、二叉树的先序/中序遍历等)(2)队列的应用(基于队列的二叉树的层序遍历、图的广度优先遍历等)第4章字符串1.串:(1)逻辑结构:定义、特点、串长、子串等(2)存储结构:定长顺序串、堆串、块链串(了解)2.本章重点难点:(1)简单模式匹配算法(2)KMP算法第5章数组和广义表1.数组:(1)数组的定义与运算、数组的顺序存储(以行序为主序存储、以列序为主序存储)(2)特殊矩阵的压缩存储:对称矩阵、三角矩阵、带状矩阵(3)稀疏矩阵的压缩存储:三元组顺序表、十字链表2.广义表(1)广义表的逻辑结构:定义、表头、表尾、长度、深度(2)广义表的存储结构:头尾链表存储、扩展线性表存储3.本章重点难点:(1)以行序(或列序)为主序存储时,数组元素地址的计算(2)稀疏矩阵的压缩存储(3)广义表的存储结构第6章树和二叉树1.树的逻辑结构:树的定义及相关术语2.二叉树的逻辑结构:二叉树的定义、特点、二叉树的5个性质、完全二叉树、满二叉树3.二叉树的存储结构:(1)顺序存储(适合满二叉树和完全二叉树)(2)链式存储:二叉链表、三叉链表4.二叉树的运算:遍历及其它运算5.树、二叉树和森林:(1)树的存储结构:双亲表示法、孩子表示法、孩子兄弟表示法(2)树和二叉树的转换、森林和二叉树的转换6.哈夫曼树:哈夫曼树的定义、特点、构造过程、哈夫曼编码7.本章重点难点:(1)二叉树的性质(2)二叉树的算法设计:基于栈的先序、中序非递归遍历,基于队列的层序遍历等(3)树的存储结构(4)哈夫曼树及哈夫曼编码第7章图1.图的逻辑结构:图的定义、图的相关术语2.图的存储结构:(1)数组表示法(又称邻接矩阵表示法)(2)邻接表(3)有向图的十字链表(4)无向图的邻接多重表3.图的运算:(1)深度优先遍历DFS、广度优先遍历BFS(算法代码设计)(2)连通图的最小代价生成树算法:Prim算法、Kruskal算法(3)拓扑排序、关键路径(4)最短路径算法:Dijkstra算法、Floyd算法4.本章重点难点:(1)图的存储结构(2)图的遍历算法设计(3)图的其它运算的逻辑过程第8章查找1.基于线性表的查找2.基于树表的查找:二叉排序树、平衡二叉树、m阶B-树3.哈希查找(1)哈希函数(重点掌握除留余数法)(2)解决冲突的方法(重点掌握线性探测再散列、链地址法)4.本章重点难点:(1)折半查找过程及分析(2)平衡二叉树的生成过程(3)哈希查找第9章内部排序1.希尔排序的过程、算法代码的阅读与设计2.快速排序的过程、算法代码的阅读与设计3.堆排序的过程、算法代码的阅读与设计。

《数据结构——C语言描述》习题及答案 耿国华.

《数据结构——C语言描述》习题及答案 耿国华.

第1章绪论习题一、问答题1. 什么是数据结构?2. 四类基本数据结构的名称与含义。

3. 算法的定义与特性。

4. 算法的时间复杂度。

5. 数据类型的概念。

6. 线性结构与非线性结构的差别。

7. 面向对象程序设计语言的特点。

8. 在面向对象程序设计中,类的作用是什么?9. 参数传递的主要方式及特点。

10. 抽象数据类型的概念。

二、判断题1. 线性结构只能用顺序结构来存放,非线性结构只能用非顺序结构来存放。

2. 算法就是程序。

3. 在高级语言(如C、或PASCAL)中,指针类型是原子类型。

三、计算下列程序段中X=X+1的语句频度for(i=1;i<=n;i++)for(j=1;j<=i;j++)for(k=1;k<=j;k++)x=x+1;[提示]:i=1时:1 = (1+1)×1/2 = (1+12)/2i=2时:1+2 = (1+2)×2/2 = (2+22)/2i=3时:1+2+3 = (1+3)×3/2 = (3+32)/2…i=n时:1+2+3+……+n = (1+n)×n/2 = (n+n2)/2f(n) = [ (1+2+3+……+n) + (12 + 22 + 32 + …… + n2 ) ] / 2=[ (1+n)n/2 + n(n+1)(2n+1)/6 ] / 2=n(n+1)(n+2)/6=n3/6+n2/2+n/3区分语句频度和算法复杂度:O(f(n)) = O(n3)四、试编写算法求一元多项式Pn(x)=a0+a1x+a2x2+a3x3+…a n x n的值P n(x0),并确定算法中的每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能的小,规定算法中不能使用求幂函数。

注意:本题中的输入a i(i=0,1,…,n), x和n,输出为P n(x0).通常算法的输入和输出可采用下列两种方式之一:(1)通过参数表中的参数显式传递;(2)通过全局变量隐式传递。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

15
9
11
B
E
7 21
3
C2 D
1A 2B 3C 4D 5E
2 15 5 9 ∧ 3 3∧ 4 2∧ 1 11 2 7 ∧ 3 21 ∧
13
第7章 图
7.2图的存储结构
②图的邻接表表示法(链式存储法)形式化描述
#define MAX_V 20
#define enum {DG,DN,UDG,UDN} GraphKind;
Ⅱ.
OD(vi)=第i个单链表上结点的个数
有向图(网):
ID(vi)扫描整个邻接表
逆邻接表
15
第7章 图
7.2图的存储结构 ②图的邻接表表示法(链式存储法)逆邻接表
有向图 A
B
E
C
D
1A 2B 3C 4D 5E
4∧
1
4∧
2
5∧
3∧
1∧
16
第7章 图 7.2图的存储结构 ③有向图的十字链表表示法(链式存储法)
}ArcNode;
typedef struct
{
VertexNode vertex[MAX_V];
int vexnum, arcnum; 14 GraphKind kind;
}AdjList;
第7章 图 7.2图的存储结构 ②图的邻接表表示法(链式存储法)特点:
Ⅰ.无向图存储空间:n+2e
无向图:TD(vi)= 第i个单链表上结点的个数
typedef struct ArcNode
{
int tailvex,headvex;
struct ArcNode *hlink,*tlink;
InfoType *info;
}ArcNode;
typedef struct VertexNode
{
VertexData data;
ArcNode *firstin,*firstout;
二维数组:用于存储图中顶点之间关联关系 邻接矩阵
1 若<vi,vj>或(vi,vj)VR
A[i,j]=
0 反之
有向图 A
A BCD E A 01 00 1 非
B 00 10 0 对
B
E
C 00 01 0 称
3
D 11 00 0 矩
CD
E 00 10 0 阵
第7章 图
7.2图的存储结构
①图的邻接矩阵表示法(数组表示法)
A[i,j]=
0 反之
无向图 BC
A
D
FE
A BCD E F
A 01 00 1 0
B 10 00 1 1 对
C 00 01 0 1 D 00 10 0 1 E 11 00 0 0
称 矩 阵
2
F 01 11 0 0
第7章 图
7.2图的存储结构
①图的邻接矩阵表示法(数组表示法)
一维数组:用于存储顶点信息。
边的结点结构 mark ivex ilink jvex jlink
顶点的结点结构 data firstedge
20
第7章 图 7.2图的存储结构 ④无向图的邻接多重表表示法
无向图
A
B
C
D
E
1A 2B 3C 4D 5E
12
1 4∧
32
34
5 2∧
3∧ 5 ∧
21
返回
2、求顶点的度
j=1n
OD(vi)= ∑A[ i,j ]
有向图(网):
j=1 n
3、FirstAdjVertex(G,v)
ID(vi)= ∑A[ j,i ] j=1
a、找v在G.Vertex[ ]中的下标i 9
b、找G.arc[i][ ]中第一个非零分量的列下标j c、 j或者G.Vertex[j]中的信息即为所求
}VertexNode;
typedef struct
{
VertexNode vertex[MAX_VERTEX_NUM];
19
int vexnum,arcnum;
GraphKind kind;
}OrthList;
第7章 图
7.2图的存储结构 ④无向图的邻接多重表表示法
顶点和边分别各用一种存储结构的结点表示。依附于相同 顶点的边被链在同一链表上,每条边依附于两个顶点,所 以每个边结点同时被链接在两个链表中,链表的头结点就 是顶点结点。同时还在边结点中增加了一个访问标志位。
一维数组:用于存储顶点信息。
二维数组:用于存储图中顶点之间关联关系 邻接矩阵
A[i,j]=
有向网
1wij 若<vi,vj>或(vi,vj)VR
0∞ 反之
A BCD E
15 A 9
11
B
E
7 21
3
C2 D
A ∞ 15 ∞ ∞ 9 非
B ∞∞ 3 ∞∞ 对
C ∞∞ ∞ 2 ∞ 称
D 11 7 ∞ ∞ ∞ 矩
for(i=0;i<G->vexnum;i++)
scanf("%c",&G->vertex[i]); /* 输入图的顶点*/
for(k=0;k<G->arcnum;k++)
{ scanf("%c,%c,%d",&v1,&v2,&weight);
/*输入一条弧的两个顶点及权值*/
i=LocateVex (G,v1);
第7章 图
7.2图的存储结构 ②图的邻接表表示法(链式存储法)
对图中每个顶点建立一个单链表,第i个 单链表中的结点表示依附于顶点vi的边。
Ⅰ.表头结点 data firstarc
Ⅱ.表结点 图 网
adjvex nextarc adjvex info nextarc
10
第7章 图 7.2图的存储结构 ②图的邻接表表示法(链式存储法)
顶点和弧分别各用一种存储结构的结点表示。弧头 相同的弧被链在同一链表上,弧尾相同的弧也被链 在同一链表上,链表的头结点就是顶点结点。
弧的结点结构 tailvex headvex hlink tlink
顶点的结点结构 data firstin firstout
17
第7章 图
7.2图的存储结构
③有向图的十字链表表示法
无向图 BC
A
D
FE
1A
2
5∧
2B
1
5
6∧
3C
4
6∧
4D
3
6∧
5E
1
2∧
6F
2
3
4∧
11
第7章 图
7.2图的存储结构 ②图的邻接表表示法(链式存储法)
有向图 A
B
E
C
D
1A 2B 3C 4D 5E
2
5∧
3∧
4∧
1
2∧
3∧
12
第7章 图 7.2图的存储结构 ②图的邻接表表示法(链式存储法)
有向网
A
4
E ∞ ∞ 21∞ ∞ 阵
第7章 图
7.2图的存储结构
①图的邻接矩阵表示法(数组表示法)形式化描述
#define MAX_V 20
#define INFINITY 32768
typedef enum{DG,DN,UDG,UDN} GraphKind;
typedef char VertexData;
int CreateDN(AdjMatrix *G) /*创建一个有向网*/ { int i,j,k,weight; VertexData v1,v2; scanf("%d,%d",&G->arcnum,&G->vexnum); for(i=0;i<G->vexnum;i++) for(j=0;j<G->vexnum;j++) G->arcs[i][j].adj=MAX;
第7章 图 7.2图的存储结构
①图的邻接矩阵表示法 ②图的邻接表表示法 ③有向图的十字链表表示法 ④无向图的邻接多重表表示法
1
第7章 图
7.2图的存储结构
①图的邻接矩阵表示法(数组表示法)
一维数组:用于存储顶点信息。
二维数组:用于存储图中顶点之间关联关系 邻接矩阵
1 若<vi,vj>或(vi,vj)VR
typedef struct ArcNode typedef struct Vertex struct ArcNode *nextarc; OtherInfo info;
VertexData data; ArcNode *firstarc; }VertexNode;
5
}AdjMatrix;
创建邻接矩阵存储的有向网
int LocateVex(AdjMatrix * G, VertexData v) { int j=Error,k;
for(k=0;k<G->vexnum;k++) if(G->vertex[k]==v) { j=k; break; }
return(j); }
Ⅰ.存储空间 无向图(网) :n(n-1)/2 有向图(网):n2
注意:稀疏图不适于用邻接矩阵来存储,因为这样 会造成存储空间的浪费。
8
第7章 图
7.2图的存储结构
①图的邻接矩阵表示法(数组表示法)特点:
Ⅱ.便于运算
1、判断图中任意两个顶点之间是否有边相连。
n
无向图(网) :TD(vi)= ∑A[ i,j ]
j=LocateVex (G,v2);
相关文档
最新文档