数据结构 耿国华 西北大学 7-2图的存储结构
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);
《数据结构(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语言描述(耿国华主编)教案
西安文理学院精品课《数据结构》教案计算机科学系韩利凯《数据结构》第一章绪论[教学目标]掌握数据结构的定义、内容、方法、描述、评价。
[重点、难点]数据结构的研究范围,研究采用的方法,算法规则描述的工具,对算法作性能评价。
[教学方法]用多媒体课件( 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课件
类语言是接近于高级语言而又不是严格的高级语言, 具有高级语言的一般语句设施,撇掉语言中的细节, 以便把注意力主要集中在算法处理步骤本身的描述 上。
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
第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.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最短路径问题-迪杰斯特拉算法
例:
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语言描述-(耿国华)-课后习题答案
第一章习题答案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)。
