电大数据结构复习大纲.docx

上传人:b****3 文档编号:4048824 上传时间:2022-11-27 格式:DOCX 页数:35 大小:35.07KB
下载 相关 举报
电大数据结构复习大纲.docx_第1页
第1页 / 共35页
电大数据结构复习大纲.docx_第2页
第2页 / 共35页
电大数据结构复习大纲.docx_第3页
第3页 / 共35页
电大数据结构复习大纲.docx_第4页
第4页 / 共35页
电大数据结构复习大纲.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

电大数据结构复习大纲.docx

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

电大数据结构复习大纲.docx

电大数据结构复习大纲

数据结构

第1页共30页

数据结构与算法复习大纲

题型及分值分布

第一部份复习大纲

第一章绪论

1.数据结构的基本概念和术语

1.1数据、数据元素、数据项、数据结构等基本概念

1.2数据结构的逻辑结构、存储结构及数据运算的含义及其相互关系

1.3数据结构的两大逻辑结构和四种常用的存储表示方法

2.算法的描述和分析

2.1算法、算法的时间复杂度和空间复杂度、最坏的和平均的时间复杂度等概念

2.2算法描述和算法分析的方法,对于一般算法能分析出时间复杂度

第二章线性表

1.线性表的逻辑结构

1.1线性表的逻辑结构特征

2.线性表的顺序存储结构

2.1顺序表的含义及特点,即顺序表如何反映线性表中元素之间的逻辑关系

2.2顺序表上的插入、删除操作及其平均时间性能分析

3.线性表的链式存储结构

3.1链表如何表示线性表中元素之间的逻辑关系

3.2链表中头指针和头结点的使用

3.3单链表、双(向)链表、循环链表链接方式上的区别

3.4单链表上实现的建表、查找、插入和删除

4.顺序表和链表的比较

数据结构

第2页共30页

4.1顺序表和链表的主要优缺点

4.2针对线性表上所需要执行的主要操作,知道选择顺序表还是链表作为其存储结构才能

取得较优的时空性能

第三章栈和队列

1.栈的逻辑结构、存储结构及其相关算法

1.1栈的逻辑结构特点,栈与线性表的异同

1.2顺序栈和链栈上实现的进栈、退栈等基本算法

1.3栈的“上溢”和“下溢”的概念及其判别条件

2.队列的逻辑结构、存储结构及其相关算法

2.1队列的逻辑结构特点,队列与线性表的异同

2.2顺序队列(主要是循环队列)和链队列上实现的入队、出队等基本算法

2.3队列的“上溢”和“下溢”的概念及其判别条件

2.4使用数组实现的循环队列取代普通的顺序队列的原因

2.5循环队列中对边界条件的处理方法

3.栈和队列的应用

3.1栈和队列的特点,什么样的情况下能够使用栈或队列

3.2表达式求值的算法思想,及栈变化情况。

第四章串、数组和广义表

1.串

1.1串的有关概念及基本运算

1.2串与线性表的关系

2.多维数组

2.1多维数组的逻辑结构特征

2.2多维数组的顺序存储结构及地址计算方式

2.3数组是一种随机存取结构的原因

2.4矩阵的压缩存储(对称矩阵、三角矩阵、稀疏矩阵)的表示方式和对应的地址计算方

式。

3.广义表的概念

3.1广义表的有关概念及其与线性表的关系

3.2求给定的广义表的表头、表尾运算

数据结构

第3页共30页

第五章树和二叉树

1.树的概念

1.1树的逻辑结构特征

1.2树的不同表示方法

1.3树的常用术语及含义

2.二叉树

2.1二叉树的递归定义及树与二叉树的差别

2.2二叉树的性质,了解相应的证明方法

3.二叉树的遍历

3.1二叉树的三种遍历算法,理解其执行过程

3.2确定三种遍历所得到的相应的结点访问序列

4.线索二叉树

4.1二叉树线索化的目的及实质

4.2在中序线索树中查找给定的中序前趋和中序后继的方法

5.树和森林

5.1树和森林与二叉树之间的转换方法

5.2树的各种存储结构及其特点

5.3树的两种遍历方法

6.Huffman树及其应用

6.1最优二叉树和最优前缀码的概念及特点

6.2Huffman算法的思想

6.3根据给定的叶结点及其权值构造出相应的最优二叉树

6.4根据最优二叉树构造对应的Huffman编码

第六章图

1.图的概念

1.1图的逻辑结构特征

1.2图的常用术语及含义

2.图的存储结构

2.1邻接矩阵和邻接表这两种存储结构的特点及适用范围

2.2根据应用问题的特点和要求选择合适的存储结构

3.图的遍历

3.1连通图及非连通图的深度优先搜索和广度优先搜索两种遍历算法

3.2确定两种遍历所得到的顶点访问序列及两种生成树

4.生成树和最小生成树

4.1生成树和最小生成树的概念

数据结构

第4页共30页

4.2对遍历给定的图,画出深度优先和广度优先生成树或生成森林

4.3Prim和Kruskal算法的基本思想、时间性能及这两种算法各自的特点

4.4要求对给定的连通图,根据Prim和Kruskal算法构造出最小生成树

5.图的应用

5.1对于给定的有向图,根据Dijkstra算法画出求单源最短路径的过程示意图

5.2拓扑排序的基本思想和步骤

5.3对给定的有向图,若拓扑序列存在,则要求写出一个或多个拓扑序列

5.4关键路径的基本思想和步骤

5.5对给定的有向图,写出求关键路径的过程

第七章查找

1.线性表的查找

1.1顺序查找、二分查找的基本思想、算法实现和查找效率分析

1.2顺序查找中哨兵的作用

1.3二分查找对存储结构及关键字的要求

2.树的查找

3.1二叉排序树和平衡二叉树的定义和特点

3.2二叉排序树的插入、删除、建树和查找算法

3.3建立一棵二叉查找树的过程实质上是对输入实例的排序过程,输入实例对所建立的二

叉查找树形态的影响

3.4平衡二叉树的插入时平失衡的调整的基本思想

4.哈希表

4.1哈希表、哈希函数、哈希地址和装填因子等有关概念

4.2哈希函数的选取原则及产生冲突的原因

4.3采用线性探测法、平方探测法和链地址法解决冲突时,哈希表的建表方法、查找过程

以及算法实现和时间分析

第八章内部排序

1.基本概念

1.1排序在数据处理中的重要性

1.2排序方法的“稳定”性含义

1.3排序方法的分类及算法好坏的评判标准

2.插入排序

2.1直接插入排序的基本思想以及在最好、最坏和平均情况下的时间性能分析

2.2直接插入排序中哨兵的作用

2.3针对给定的输入实例,要能写出直接插入排序的排序过程

数据结构

第5页共30页

2.4掌握直接插入排序的算法

3.交换排序

3.1冒泡排序的基本思想以及在最好、最坏和平均情况下的时间性能分析

3.2判断冒泡排序结束的条件

3.3针对给定的输入实例,要能写出冒泡排序的排序过程

3.4掌握冒泡排序的算法

3.5快速排序的基本思想和算法实现,以及在最坏和平均情况下的时间性能分析,了解算

法的稳定性

3.6针对给定的输入实例,能写出快速排序的排序过程

3.6掌握快速排序的算法

4.选择排序

4.1简单选择排序的基本思想和算法实现,以及时间性能分析

4.2针对给定的输入实例,写出直接选择排序的排序过程

4.3掌握简单选择排序的算法

5.各种排序方法的比较和选择

5.1通过对被排序的记录数目、记录信息量的大小、关键字的结构及初始状态、稳定性能、

辅助空间的大小、各种时间性能等方面的比较掌握各种排序的优缺点

5.2根据实际问题的特点和要求选择合适的排序方法

数据结构

第6页共30页

第二部份复习重点

第一章绪论

1.1数据、数据元素、数据项、数据结构等基本概念

1.数据(data):

客观事物的符号表示,在计算机科学中指所有能输入计算机中并被计算机处

理的符号总称。

整数、浮点数、字符串、声音、图像。

2.数据元素(dataelement):

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

理。

3.一个数据元素可能由若干个数据项(dataitem)组成。

数据元素是一个数据整体中相对独立

的单位。

但它还可以分割成若干个具有不同属性的项(字段)。

故不是组成数据的最小单位。

数据项是构成数据的最小单位。

4.数据对象(dataobject):

性质相同的数据元素的集合,是数据的一个子集。

5.数据结构(datastructure):

数据元素以及数据元素之间存在的关系。

6.数据结构主要描述:

数据元素之间的逻辑关系、数据在计算机系统中的存储方式和数据的运

算,即数据的逻辑结构、存储结构和数据的操作集合

1.2数据结构的逻辑结构、存储结构的含义及其相互关系

1.数据的逻辑结构:

用形式化方式描述数据元素间的关系。

数据的逻辑结构独立于计算机,是

数据本身所固有的。

用于算法的设计。

2.有两大类逻辑结构:

线性结构(线性表、栈、队列、数组和串),非线性结构(树和图)。

3.数据的物理结构(也称存储结构):

数据在计算机中的具体表示。

包括数据元素的表示和关

系的表示。

存储结构是逻辑结构在计算机存贮器中的映像,必须依赖于计算机。

用于算法的

实现。

4.数据的存储方式可分为如下两类:

顺序存储、链接存储。

1.3算法

1.算法的定义:

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

2.算法的特性:

有穷性——算法必须在执行有穷步之后结束,而且每一步都可在有穷时间内完成

确定性——每条指令无二义性。

并且,相同的输入只能得到相同的输出;

可行性——算法中描述的每一操作,都可以通过已实现的基本运算来实现。

输入——算法有零至多个输入。

输出——算法有一个至多个输出

3.算法效率的度量:

时间复杂度和空间复杂度及计算。

数据结构

第7页共30页

第二章线性表

2.1线性表的逻辑结构特征

存在唯一的一个被称作第一个的数据元素;存在唯一的一个被称作最后一个的数据元

素;除第一个元素之外,集合中的每个数据元素均只有一个前驱;除最后一个元素之外,集

合中的每个数据元素均只有一个后继。

2.2线性表的顺序存储结构

1.用一组连续的存储单元依次存储线性表的数据元素。

在线性表的顺序存储表示中,只要确定

了线性表的起始位置,线性表中任一数据元素都可随机存取。

线性表的顺序存储结构是一种

随机存取的存储结构。

LOC(ai+1)=LOC(ai)+l

LOC(ai+1)=LOC(a1)+i*l

LOC(ai)表示元素ai的存储位置;LOC(a1)表示第一个数据元素的存储位置,通常称为

线性表的起始位置或基地址每个数据元素占用l个存储单元。

2.线性顺序表上的插入是指在第i(1≤i≤n+1)个位置插入一个新的数据元素,需将第i至第n

共(n-i+1)个元素后移

注意:

Ø顺序表中数据区域有listSize个存储单元,所以在向顺序表中做插入时先检查表空

间是否满了,在表满的情况下不能再做插入,否则产生溢出错误。

Ø要检验插入位置的有效性,这里i的有效范围是:

1<=i<=n+1,其中n为原表长。

Ø注意数据的移动方向

算法时间复杂度:

移动元素个数:

n-i+1

平均移动元素个数:

n/2

T(n)=O(n);

3.线性顺序表上的删除是指第i(1≤i≤n)个数据元素删除掉,需将第i+1至第n共(n-i)个

元素前移

注意:

Ø删除第i个元素,i的取值为1<=i<=n,否则第i个元素不存在,因此,要检

查删除位置的有效性。

Ø当表空时不能做删除。

Ø删除ai之后,该数据已不存在,如果需要,先取出ai,再做删除。

算法时间复杂度:

移动元素个数:

n-i

平均移动元素个数:

(n-1)/2

T(n)=O(n);

数据结构

第8页共30页

4.线性表的顺序存储。

优点:

逻辑相邻,物理相邻可以实现数据元素的随机存取;

缺点:

在作插入或是删除操作时,需要移动大量数据元素

2.3线性表的链式存储结构

1.线性表链式存储结构的特点:

用一组任意的存储单元存储线性表的数据元素。

在线性表的链

式存储中,在进行插入或是删除操作时,不需要进行数据元素的移动,但不能实现数据元素

的随机存取。

2.线性链表的表示:

数据元素、数据元素之间的关系;

数据域存储数据元素,指针域存储数据元素之间的关系:

直接后继的存储位置,

线性链表:

每个节点只包含一个指针域

3.假定指针p指向线性链表中的第i个数据元素,则p->next为指向线性链表中第i+1个数据

元素的指针。

即p->data为ai,p->next->data为ai+1。

(*p)表示p所指向的结点

(*p).dataÛp->data表示p指向结点的数据域

(*p).nextÛp->next表示p指向结点的指针域

4.在单链表中查找第i个元素

StatusgetElem_L(LinkListL,inti,ElemType&e)

{//获取线性链表中的第i个数据元素

p=L->next;

j=1;

while(p&&j

{

p=p->next;

++j;

}

if(!

p‖j>i)returnERROR;

returnp->data;

}//GetElem_L

5.在单链表中插入数据元素

S->next=P->next;

P->next=S;

数据结构

第9页共30页

StatuslistInsert_L(LinkList&L,inti,ElemTypee){

p=L;j=0;

while(p&&j

p=p->next;++j;

}

if(!

p‖j>i-1)returnERROR;

s=(LinkList)malloc(sizeof(LNode));

s->data=e;

s->next=p->next;

p->next=s;

returnOK;

}

6.在单链表中删除数据元素

P->next=P->next->next;或

q=p->next;

p->next=q->next;

free(q);

StatuslistDelete_L(LinkList&L,inti){

p=L;j=0;

while(p->next&&j

p=p->next;++j;

}

if(!

(p->next)‖j>i-1)returnERROR;//删除位置不合理

q=p->next;

p->next=q->next;

free(q);//删除并释放结点

returnOK;

}//ListDelete_L

7.循环链表:

表中最后一个结点的指针域指向头结点,整个链表形成一个环。

循环链表的操作和单链表基本一致,差别仅在于,判别链表中最后一个结点的条件不再

是"后继是否为空",而是"后继是否为头结点"。

(1)单链表p或p->next==NULL

(2)循环链表p->next==L

8.双向链表有两个指针域,一个指向直接前驱,一个指向直接后继。

1)向双向链表中插入一个结点:

数据结构

第10页共30页

s->prior=p->prior;

p->prior->next=s;

s->next=p;

p->prior=s;

2)向双向链表中插入一个结点:

s->prior=p;

s->next=p->next;

p->next->prior=s;

p->next=s;

3)从双向链表中删除一个结点

①p->prior->next=p->next;

②p->next->prior=p->prior;

第三章栈和队列

3.1栈和队列的逻辑结构特征

1.栈(stack)和队列(queue)是两种重要的线性结构,特殊性在于其基本操作是线性表操作

的子集,是操作受限的线性表(操作限定在两个端点进行),为具有限定性的数据结构。

按“后进先出”的规则进行操作,队列按“先进先出”的规则进行操作。

数据结构

第11页共30页

2.栈是限定在表尾进行插入和删除操作的线性表。

允许插入,删除的一端称为栈顶(top),另一端

称为栈底(bottom)。

3.栈的基本运算主要有两个:

Push(S,e),进栈,插入(压入)元素e为新的栈顶元素,Pop(S),

出栈,删除(弹出)S的栈顶元素。

如:

若元素入栈的顺序为1234,为了得到1342出栈顺序,

操作序列为:

Push(S,1),Pop(S),Push(S,2),Push(S,3),Pop(S),Push(S,4),Pop(S),

Pop(S)。

3.2栈的顺序存储结构

1.顺序栈:

利用一组地址连续的存储单元一次存放从栈底到栈顶的数据元素,用指针top指示

栈顶元素在顺序栈中的位置。

top指向栈顶元素的下一个位置top指向栈顶元素

初始化:

S.top=S.baseS.top=S.base-1

判栈空:

S.base==S.topS.base==S.top-1

入栈:

*s->top++=e(先压后加)*++s->top=e(先加后压)

栈满:

S.top-S.base>=S.stacksizeS.top-S.base>=S.stacksize-1

出栈:

e=*--S.top(先减后弹)e=*S.top--(先弹后减)

Ø入栈时,首先判栈是否满了,栈满的条件为:

S.top-S.base>=S.stacksize,栈满时,不

能入栈;否则出现空间溢出,引起错误,这种现象称为上溢。

Ø出栈和读栈顶元素操作,先判栈是否为空,为空时不能操作,否则产生错误。

通常栈空时

常作为一种控制转移的条件。

2.用数组的索引值表示栈底和栈顶

top指向栈顶元素的下一个位置top指向栈顶元素

初始化:

top=0top=-1

判栈空:

top==0top==-1

入栈:

v[top++]=x(先压后加)v[++top]=x(先加后压)

栈满:

top-base>=stacksize;top-base>=stacksize-1;

出栈:

y=v[--top])(先减后弹)y=v[top--])(先弹后减)

3.两栈共享空间:

top[0]表示第一个栈的栈顶;top[1]表示第二个栈的栈顶

栈空:

top[0]=-1;top[1]=n

入栈:

a[++top[0]]=e;a[--top[1]]=e

栈满:

top[0]+1=top[1]

出栈:

e=a[top[0]--];e=a[top[1]++]

4.关于顺序栈的说明:

入栈时,首先判栈是否满了,栈满时,不能入栈;否则出现空间溢出,引

起错误,这种现象称为上溢。

出栈和读栈顶元素操作,先判栈是否为空,为空时不能操作,

否则产生错误。

通常栈空时常作为一种控制转移的条件。

数据结构

第12页共30页

3.3栈的顺序链式存储

入栈:

p=newLNode;//建新的结点

if(!

p)exit

(1);//存储分配失败

p->data=e;

p->next=S->top;//链接到原来的栈顶

S->top=p;//移动栈顶指针

出栈:

if(!

S->top)returnNULL;

else

{e=S->top->data;//返回栈顶元素

q=S->top;

S->top=S->top->next;//修改栈顶指针

free(q);//释放被删除的结点空间

returne;

}

3.4栈的应用举例

1.数制转换

#defineNUM10

voidconversion(intN,intr){

ints[NUM],top;/*定义一个顺序栈*/

intx;

top=-1;/*初始化栈*/

while(N){

s[++top]=N%r;/*余数入栈*/

N=N/r;/*商作为被除数继续*/

}

while(top!

=-1){

x=s[top--];

数据结构

第13页共30页

printf(“%d”,x);

}

}

2.括号匹配的检验:

3.表达式求值:

熟悉前缀、中缀和后缀表达式,表达式求值时栈的状态变化。

4.栈与递归的实现:

熟悉使用递归解决

3.5队列的逻辑结构特征

队列:

只允许在一端进行插入,而在另一端删除元素。

允许插入的一端为队尾(rear),允

许删除的一端为队头(front)。

3.6队列的顺序存储结构

1.循环队列的顺序存储结构:

队列存放数组被当作首尾相接的表处理。

队头、队尾指针加1时

用语言的取模(余数)运算实现。

队列初始化:

front=rear=0;

队空条件:

front==rear;

队满条件:

(rear+1)%MAXQSIZE==front

队头指针进1:

front=(front+1)%MAXQSIZE;

队尾指针进1:

rear=(rear+1)%MAXQSIZE;

队中元素个数:

(rear-front+MAXQSIZE)%MAXQSIZE

2.链式队列:

进队:

p=(QueuePtr)malloc(sizeof(QNode));

if(!

p)return0;//存储分配失败

p->data=e;p->next=NULL;

Q->rear->next=p;Q.rear=p;

出队:

if(Q->front==Q->rear)returnNULL;

p=Q->front->next;e=p->data;

Q->front->next=p->next;

if(Q->rear==p)Q->rear=Q->front;

free(p);returne;

数据结构

第14页共30页

第四章串、数组和广义表

4.1串相关术语

串即字符串,是由零个或多个字符组成的有限序列,是数据元素为单个字符的特殊线性表。

串长:

串中字符个数(n≥0).n=0时称为空串Æ。

空白串:

由一个或多个空格符组成的串。

子串:

串s中任意个连续的字符序列叫s的子串;s叫主串。

子串位置:

子串的第一个字符的序号。

字符位置:

字符在串中的序号

串相等:

串长度相等,且对应位置上字符相等。

串的逻辑结构和线性表极为相似,区别仅在于串的数据对象约束为字符集;串的基本操作和

线性表有很大差别。

在线性表的基本操作中,大多以“单个元素”作为操作对象;在串的基本操

作中,通常以“串的整体”作为操作对象。

4.2串的基本操作

熟悉以下操作的意义:

StrAssign(&T,chars)

StrCopy(&T,S)

DestroyString(&S)

StrEm

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

当前位置:首页 > 小学教育 > 语文

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

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