数据结构 11.docx

上传人:b****6 文档编号:8870240 上传时间:2023-02-02 格式:DOCX 页数:18 大小:344.86KB
下载 相关 举报
数据结构 11.docx_第1页
第1页 / 共18页
数据结构 11.docx_第2页
第2页 / 共18页
数据结构 11.docx_第3页
第3页 / 共18页
数据结构 11.docx_第4页
第4页 / 共18页
数据结构 11.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

数据结构 11.docx

《数据结构 11.docx》由会员分享,可在线阅读,更多相关《数据结构 11.docx(18页珍藏版)》请在冰豆网上搜索。

数据结构 11.docx

数据结构11

数据结构复习提纲

第二部分复习提纲(不分题型)

1.数据的三个层次是数据、数据元素和数据项。

2.四种基本存储方式的特点?

什么时候逻辑关系可以由存储地址表示?

什么时候由指针表示?

什么时候存储地址与结点内容有关系?

答:

◆顺序存储方法:

它是把逻辑上相邻的结点存储在物理位置相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。

由此得到的存储表示称为顺序存储结构。

◆链接存储方法:

它不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系是由附加的指针字段表示的。

由此得到的存储表示称为链式存储结构。

◆索引存储方法:

除建立存储结点信息外,还建立附加的索引表来标识结点的地址。

◆散列存储方法:

就是根据结点的关键字直接计算出该结点的存储地址。

 

3.四种基本逻辑结构是什么?

逻辑结构与存储结构是否一一对应?

逻辑结构与计算机是否有关?

逻辑结构:

答:

 

4.运算、算法含义?

谁定义在存储结构上?

谁定义在逻辑结构上?

答:

运算是在数据逻辑结构上定义的操作算法。

所谓算法(Algorithm)是对问题求解步骤的一种描述,是指令的有限序列,其中每一条指令表示一个或多个操作。

所谓算法复杂度:

T(n)=O(f(n))

称T(n)为算法的渐近时间复杂度(AsymptoticTimeComplexity),简称时间复杂度。

O是数量级的符号。

下面我们探讨一下如何估算算法的时间复杂度

算法=控制结构+原操作(固有数据类型的操作)

算法的执行时间=原操作(i)的执行次数×原操作(i)的执行时间

算法的执行时间与原操作执行次数之和成正比

5.运算可分为加工型和___。

5.数据结构一般包括三个方面内容:

逻辑结构、储存结构和运算。

6.算法的复杂性与计算机是否有关?

 

7.算法正确与否一般是用理论证明还是用算例检验?

答:

用算例须考虑所有情况,用理论需要严谨的数学证明。

9.时间复杂性一般考虑平均时间复杂性和最坏时间复杂性。

10.程序设计的实质是______和______。

11.将2100、log2n、nlog2n、nn、n2、2n、n!

等按增长率从低到高排列是______。

答:

2100

1.线性表每个结点都有一个前趋和后继吗?

答:

开始结点只有一个后继,终端结点只有一个前趋。

2.头结点有何作用?

 

3.链表结点的物理地址一定不连续吗?

-连续与否都可

 

4.单链表插入、删除结点的一般过程?

(指针修改情况)

如果插入在链表开头:

NewNewNode;NewNode->Next=Pointer;HEAD->Next=NewNode;

如果插入在链表中间:

NewNode->Next=Pointer->Next;Pointer->Next=NewNode;

如果插入在链表末端:

NewNode->Next=Pointer->Next;Pointer->Next=NewNode;

如果删除在链表开头:

Head->Next=Pointer->Next;free(Pointer);

如果删除在链表中间:

Back-〉Next=Pointer-〉Next;free(Pointer);

如果删除在链表末端:

Back-〉Next=Pointer-〉Next;free(Pointer);

 

5.顺序表、单链表优点缺点?

是否可以(按值、按序号)随机存取?

顺序存取?

答:

链表的优点是空间动态分配,插入和删除时不需要移动数据,缺点是不能随机访问。

顺序表的优点是能熟记存取数据元素可以按值随机存储,存取速度快,缺点:

插入、删除操作需移动数据。

 

6.顺序表插入、删除时是否总引起结点的移动?

答:

只有插入、删除在表末,不会引起结点的移动。

7.分别对有头结点、无头结点的循环、非循环单链表,如何判断为空?

如何判断某结点为尾结点?

 

8.循环链表主要优点?

用尾指针表示循环单链表有什么好处?

答:

尾指针是指向终端结点的指针,用它来表示单循环链表可以使得查找链表的开始结点和终端结点都很方便,设一带头结点的单循环链表,其尾指针为rear,则开始结点和终端结点的位置分别是rear->next->next和rear,查找时间都是O

(1)。

若用头指针来表示该链表,则查找终端结点的时间为O(n)。

9.何为储存密度?

10.例,输出无头结点的单链表中所有奇数。

解:

设链表类型定义如下:

typedefintdatatype;//结点数据类型,假设为int

typedefstructnode*pointer;//一般结点指针类型

structnode{//结点结构

datatypedata;

pointernext;

};

typedefpointerlklist;//头指针类型

voiddisp(lklistL){

pointerp;

p=L;

while(p!

=NULL){

if(p->data%2==1)cout<data<

p=p->next;

}

}

 

11.例,判断无头结点的链表中结点是否构成等差数列。

解:

链表类型定义同上题。

intdetect(lklistL){

pointerp,q;//以下用q表示p的前趋

datatypex;

q=L;if(q==NULL)return1;//链表为空

p=q->next;if(p==NULL)return1;//链表只有1个结点

x=p->data-q->data;//初始结点差

while(p->next!

=NULL){

q=p;p=p->next;

if(p->data-q->data!

=x)return0;//不满足等差关系

}

return1;

}

12.例,删除无头结点的链表中的第i个结点。

解:

链表类型定义同上题。

voiddelete(lklistL,inti){

intk=0;pointerp=L,q;

while(k!

=i-1){//找第i-1个结点

p=p->next;k++;

}

q=p->next;p->next=q->next;deleteq;

}

13.例,在无头结点的链表中的第i个结点前插入数据x。

解:

链表类型定义同上题。

voidinsert(lklistL,intI,datatyoex){

intk=0;pointerp=L,q;

while(k!

=i-1){//找第i-1个结点

p=p->next;k++;

}

q=newnode;q->data=x;

q->next=p->next;p->next=q;

}

1.何为假上溢?

如何克服?

 

2.循环队列如何实现?

 

3.何为栈、队列?

两者共同特点?

答:

栈是限定仅在表为进行插入或删除操作的线性表。

队列是一种先进先出的线性表。

在数据结构上是相同的。

4.链队列、链栈是否都有必要设置头结点?

有没有上溢、下溢、假溢出问题?

 

5.例:

三个点ABC依次进栈(在进栈的中间可能有出栈)。

问ABC、BCA、CAB能否是可能的出栈序列?

解:

按先进后出的原则分析,ABC可行:

即A进A出、B进B出、C进C出;

BCA可行:

即A进不出,B进B出、C进C出、A出;

CAB不行:

C出后,栈内有BA,应B先出。

6.循环队列A[m]中,已知头指针、尾指针与元素个数中的任意两个,求另一个?

len=(rear-front+m)%m;

rear=(front+len)%m;

front=(rear-len+m)%m;

7.循环队列A[m]空、满的条件?

空:

rear=front

满:

front=(rear+1)%m;

8.串、长度、子串、相等、子串定位等的概念;

答:

串中字符的数目n称为串的长度。

0个字符的串成为空串,它的长度为0。

串的串连是将一个串紧接着存放在另一个串的后面而成的一个新串。

串的连接满足结合率,不满足交换率

串的模式匹配问题:

子串的定位操作通常称为串的模式匹配。

通常思想是从主串S的第pos个字符起和模式的第一个字符比较,若相等则继续逐个比较后继字符,否则从主串的下一个字符起再重新和模式的字符比较。

依此类推,直至模式T中的每个字符依次和主串S中的一个连续的字符序列相等,则称匹配成功,函数值为和模式T中第一个字符相等的字符在主串S中的序号,否则称模式不匹配,函数值为0。

 

1.一维数组是否是顺序表?

数组元素地址的计算?

答:

是,

2.多维数组的两种储存方式?

C数组用哪一种?

答:

以行序位主序的存储方式和与列序为主的存储方式。

C数组用以行序为主。

3.三元组含义?

一般矩阵按三元组存储能否节省空间?

答:

三元组表表示法:

每一个非0元素对于一个三元组(row,col,val),row为非0元素的行下标,col为非0元素的列下标,val为非0元素的值。

显然,有N个非0元素的,只需要3N个存储单元。

4.何为稀疏矩阵、特殊矩阵?

为什么要对矩阵压缩存储?

答:

稀疏矩阵:

对于m*n的矩阵A中若有N个非0元,若N<

特殊矩阵

(1):

对称矩阵由于对称性,只需存储上三角或下三角部分,如按行优先顺序存储对称矩阵A,则等价于压缩在一个一维数组B中。

LOC[aij]=LOC[B[k]]=LOC(a11)+(k-1)*L

特殊矩阵

(2):

上(下)三角矩阵以下三角为例,既当i

其压缩思路同对称矩阵。

LOC[aij]=LOC(a11)+(k-1)*L

矩阵压缩的原因:

在数值分析中经常出现一些阶数很高的矩阵,同时在矩阵中有许多值相同的元素或者是0元素。

有时为了节省存储空间,可以对这类矩阵进行压缩储存。

 

1.二叉树顺序存储后逻辑关系通过什么表示?

答:

顺序存储结构:

按照顺序存储结构的定义,在此约定,用一组地址连续的存储单元依次自上而下、自左至右存储完全二叉树上的结点元素,即将完全二叉树上的编号为i的结点元素存储在如上定义的一维数组中下标为i-1的分量中。

2.何时用树结构?

树是否只能用链式存储?

解:

表示具有分支和层次关系的数据时用树。

二叉树等特殊情况可用顺序存储。

3.已知二叉树的深度k,则其结点数范围?

已知二叉树的结点数,则其深度k范围?

4.只有3个结点的二叉排序树有几种形态?

解:

有5种,见下图所示。

 

5.完全二叉树有6个叶子,则结点总数就是11吗?

解:

已知叶子数的完全二叉树一般有两棵,结点数差1,见下图:

一般,结点数n=n0+n1+n2,而n0=n2+1(二叉树性质),所以n=2n0-1+n1。

完全二叉树树中度为1的结点最多只有1个,即n1=1或0,所以n=2n0或n=2n0-1。

6.某完全二叉树有600个结点,则叶子数有多少?

度1结点有多少?

解:

由层次编号规律,结点i的左孩子编号为2i,若结点i为叶子,则它没有左孩子,即2i>n,即i>n/2=300的结点为叶子,叶子号为301,302,…,600,共300个。

由于n0=n2+1,现在n0=300,所以n2=299。

另外,结点总数n=n0+n1+n2,所以n1=600-300-299=1

7.最优二叉树的构造过程?

WPL计算?

 

8.最优二叉树可否有100个结点?

若有111个结点,则其中有多少个叶子?

有没有度为1的结点?

解:

结点总数n=2n0-1,n0为叶子数,可见结点数为奇数。

对111个结点,n0=(n+1)/2=56。

根据构造过程,每次两个结点合并,故结点的度要么为2(分支结点),要么为0(叶子),不会出现度1的结点。

9.二叉树的顺序存储结构、二叉链表的画法?

二叉链表中有多少个空指针?

 

10.如何由先序+中序、后序+中序还原出二叉树?

解:

由遍历方法以下几点是显然的:

①对前序序列,序列的第一个点就是整个二叉树的根;

②对后序序列,序列的最后一个点就是整个二叉树的根;

③对中序序列,以根为界,序列的前一部分结点在根的左子树中,后一部分结点在根的右子树中;并且,由前一部分构成的子序列是左子树的中序序列,由后一部分构成的子序列是右子树的中序序列。

若给定了前序和中序序列,反复利用上面的①和③,就可获得结点完整的逻辑信息,即由前序序列找到根,由中序序列得到左、右子树;再在对每个子树由前序序列找到子树的根,由中序序列得到子树的左、右子树,等等类推,每次都可得到一个点(子树的根),从而逐渐获得树的全部信息,也就可以还原和构造出该二叉树。

这个过程参见下图。

例:

已知二叉树的中序和后序序列分别为:

BCDAFEHJIG、DCBFJIHGEA,画出该二叉树。

解:

由后序序列可知,整个二叉树的根为A,再从中序序列找到结点A,其左边为BCD,对应A的左子树,右边为FEHJIG,对应根的右子树。

对每个子树进行同样分析即可画出此二叉树。

比如对左子树BCD,从原后序序列可找到它对应的后根序列为DCB,于是左子树的根为B,然后再由中序序列BCD可知B的左子树为空,CD在B的右子树,等等继续下去,直到每个结点都画出来。

10.树、森林与二叉树的相互转换?

如何判断二叉树是树还是森林转换而来?

树/森林的遍历与对应二叉树的遍历之间有何关系?

答:

森林与二叉树的转换:

1.保留所有结点与其左结点的链接

2.连接所有兄弟结点(拥有同一父结点的子结点)

3.打断所有结点原本与右子结点的链接

4.将兄弟结点顺时针转45度。

图为。

树和森林的遍历:

树结构定义可以引出两种次序遍历树的方法,先根次序和后根次序,而森林的两种方法分别是先序和后序,树和森林的具体遍历方法与二叉树的三种遍历方法类似。

 

11.树的孩子链表、双亲链表、孩子兄弟链表的画法?

 

13.例:

求二叉树的结点数。

解:

设二叉树结点类型为bitree,函数名为sum,函数返回结点数。

intsum(bitreet){

intL,R;

if(t==NULL)return0;//当前树为空,递归出口

L=sum(t->lchild);//求左子树中结点数

R=sum(t->rchild)//求右子树中结点数

returnL+R+1;//结点数=左子树中结点数+右子树中结点数+1

}

14.例:

求二叉树的叶子结点数。

解:

设二叉树结点类型为bitree,函数名为leaf,函数返回叶子数。

intleaf(bitreet){

intL,R;

if(t==NULL)return0;//当前树为空,递归出口

if(t->lchild==NULL&&t->rchild==NULL)return1;//当前点为叶子,递归出口

L=leaf(t->lchild);//求左子树中叶子数

R=leaf(t->rchild)//求右子树中叶子数

returnL+R;//叶子数=左子树中叶子数+右子树中叶子数

}

15.例:

求二叉树的高度。

解:

设二叉树结点类型为bitree,函数名为high,函数返回高度。

inthigh(bitreet){

intL,R;

if(t==NULL)return0;//当前树为空,递归出口

L=high(t->lchild);//求左子树高度

R=high(t->rchild)//求右子树高度

return(L>R?

L:

R)+1;//高度=左、右子树高度较大者+1

}

1.图的边数范围?

连通图的边数范围?

顶点度数之和与边数有何关系?

答:

无向图中最多有

条边,若为有向图,最多有n(n-1)条边。

连通图最少有n-1条边。

若一个图中有n个顶点和e条边,则图中所有顶点的度同边数e满足:

2.图的两种常用储存方式邻接表、邻接矩阵。

2.有向图、无向图邻接表、邻接矩阵的画法?

特点?

在邻接表、邻接矩阵上求出度和入度?

答:

邻接矩阵:

是表示顶点之间相邻关系的矩阵。

在采用邻接矩阵表示图,对于无向图,边数即为矩阵中非0(或非max)的个数除以2,对于有向图,边数即为矩阵中非0(或非max)的个数;对于无向图,顶点vi的度就是对应第i行或第i列上非0(或非max)元素的个数,对于有向图,顶点vi的出度就是对应第i行上非0(或非max)元素的个数,顶点vi的入度就是对应第i列上非0(或非max)元素的个数。

邻接表:

是对图中的顶点建立一个邻接关系的单链表,并把它们的表头指针用向量存储的一种图的表示方法。

在图的邻接表中便于查找一个顶点的度(出度),这只要首先从表头向量中取出对应的表头指针,然后从表头指针出发进行查找计算即可。

但对于有向图的邻接表中查找一个顶点的入度,那就不方便了,它需要扫描所有的顶点邻接表中所有顶点邻接表中的边结点,因此专门建立一个逆邻接表,该表中的每个顶点的单链表示储存该顶点的所有入边的信息。

3.如何由输入的边信息画邻接表?

如何在邻接表上进行DFS、BFS遍历?

答:

画邻接表:

(1)fori:

=1tondo

Begin

Read(GL[i].data);{读入顶点vi的信息}

GL[i].link:

=nil;{表头指针域置空}

End;

(2)fork:

=1toedo

begin

Read(i,j);{读入一条边的两端点序号}

New(s);s^.adjvex:

=j;

{为vi邻接表生成一个出边邻接顶点}

s^.next:

=GL[i].link;GL[i].link:

=s;{把结点s^插入到vi邻接表的表头}

end;

DFS:

Proceduredfs(i);

Begin

(1)write(i);

(2)visited[i]:

=true;{置vi结点已访问}

(3)p:

=GL[i].link;{取vi邻接表的表头指针}

(4)whilep<>nildo{依次搜索vi的邻接点}

begin

j:

=p^.adjvex;{j为vi的一个临界点的符号}

ifnotvisited[j]then

dfs(j);{如果vi的一个邻接点vj没有被访问,则从vj出发调用}

p:

=p^.next;{使用p指向vi的下一格邻接点所对应的边结点}

end

end;

BFS:

Procedurebfs(i);{从出发点vi出发广度优先搜索用邻接表GL表示的图}

Begin

Setnull(Q);{置队列空}

Write(i);{访问处始点vi}

Visited[i]:

=true;{置vi已访问}

Insert(Q,i);

Repeat

(1)k:

=delete(Q);{队首元素出队,第一次执行时是把i赋给k}

(2)p:

=GL[k].link;{取vk邻接表的表头指针}

(3)whilep<>nildo{依次搜索vk的邻接点}

begin

j:

=p^.adjvex;{vj为vk的一个邻接表}

ifnotvisitedthen

write(j);{访问点vj}

visited[j]:

=true;

insert(Q,j);

p:

=p^.next{使p指向下一个邻接点对应的边结点}

untilempty(Q)

end;

5.DFS的实现用到栈,BFS的实现用到队列。

5.DFS类似树的先根遍历,BFS类似树的层次遍历。

6.有向图顶点出度之和=结点入度之和?

答:

顶点出度之和=结点入度之和

7.连通分量含义?

连通图有多少连通分量?

答:

在无向图G中,若从顶点vi到顶点vj有路径,则称vi和vj是连通的。

若图中的任意两个顶点都连通,则称G为连通图,否则称为非连通图。

无向图G的极大连通子图称为G的连通分量。

显然,任何连通图的连通分量只有一个,即本身。

 

8.生成树、最小生成树的概念?

如何求?

唯一否?

生成树:

一个连通无向图的生成树是图的一个连通分量,它含有图的所有n个顶点以及连接这些顶点的n-1条边。

不唯一。

最小生成树:

具有权最小的生成树称为图的最小生成树。

不唯一。

Prim算法和Kruskal算法。

11.什么图可得到生成树,什么图可得到生成森林?

解:

连通图得到生成树,非连通图得到生成森林。

12.如何拓扑排序?

有向图是否总可拓扑排序?

唯一否?

-无回路的有向图可以拓扑排序,不一定唯一

13.例:

在邻接矩阵M[n][n]上求顶点k的入度。

解:

入度=矩阵相应列中1的个数。

intin(intM[n][n],intn,intk){

inti,j=0;

for(i=0;i

returnj;

}

 

1.为什么要进行排序?

-方便以后的查找

2.排序可分为插入排序、选择排序、交换排序、_____、_____。

3.当初始序列基本有序时,哪些排序方法较快?

哪些排序方法反而变慢?

4.哪些排序方法的效率与序列的初始状态基本无关?

有关?

5.哪些排序方法稳定、不稳定?

排序法

平均时间复杂度

最坏时间复杂度

稳定度

空间复杂度(辅助存储)

效率与序列的初始状态

冒泡排序法

O(n2)

O(n2)

稳定

O

(1)

基本有关

快速排序

O(nlog2n)

O(n2)

不稳定

O(log2n)

选择排序

O(n2)

O(n2)

稳定

O

(1)

基本有关

堆排序

O(n×log2n)

O(n×log2n)

不稳定

O

(1)

插入排序

O(n2)

O(n2)

稳定

O

(1)

基本有关

谢尔排序

O(n1.3)

O

不稳定

O

(1)

二叉排序树

O(n×log2n)

O(n2)

不一定

O(n)

归并排序

O(n×log2n)

O(n×log2n)

稳定

O(n)

基数排序

O(d(n+rd))

O(d(n+rd))

稳定

O(n+rd)

6.关键字比较次数越少,排序就越快吗?

快速排序在任何时候都最快吗?

解:

除了关键字比较,还有关键字移动问题。

如果移动次数多、结点内容又多,则排序时间也会较长。

特别地,基数排序不需比较,但执行时间并不一定比需要比较的排序快。

6.各种排序方法步骤如何?

要会写每趟的结果。

难点:

快速排序、堆排序、希尔排序。

1.二分查找、顺序查找、分块查找对数据表有何要求?

分块查找由哪2步组成?

答:

需要数据项有序,分块查找:

先确定待查记录所在的块,可以用顺序查找也可以用折半查找;然后再块中顺序查找。

2.顺序查找的监视哨是否一定设在0号位置?

不一定

3.何为二叉排序树?

中序特点?

其形态与什么有关?

答:

二叉排序树(binarysorttree)或者是一棵树,或者是具有下列性质的二叉树:

(1)若它的左子树不为空,则左子树上所有结点的值均小于它根结点的值;

(2)若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)他的左、右子树也分别是二叉排序树。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 城乡园林规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1