当前位置:文档之家› 数据结构期末复习重点知识点总结

数据结构期末复习重点知识点总结

第一章绪论

一、数据结构包括:逻辑结构、存储结构、运算(操作)三方面内容。

二、线性结构特点是一对一。

树特点是一对多

图特点是多对多

三、数据结构的四种存储结构:顺序存储、链式存储、索引存储、散列存储

顺序存储结构和链式存储结构的区别?

线性结构的顺序存储结构是一种随机存取的存储结构。

线性结构的链式存储是一种顺序存取的存储结构。

逻辑结构分类:集合线性树图,各自的特点。或者分为线性结构和非线性结构。

四、算法的特征P13

五、时间复杂度

(1) i=1; k=0;

while(i

{ k=k+10*i;i++;

}

分析:

i=1; //1

k=0; //1

while(i

{ k=k+10*i; //n-1

i++; //n-1

}

由以上列出的各语句的频度,可得该程序段的时间消耗:

T(n)=1+1+n+(n-1)+(n-1)=3n

可表示为T(n)=O(n)

六、数据项和数据元素的概念。

第二章线性表

一、线性表有两种存储结构:顺序存储和链式存储,各自的优、缺点。

二、线性表的特点。

三、顺序表的插入、思想、时间复杂度o(n)、理解算法中每条语句的含义。

(1)插入的条件:不管是静态实现还是动态实现,插入的过程都是从最后一个元素往后挪动,腾位置。静态是利用数组实现,动态是利用指针实现。不管静态还是动态,在表中第i个位置插入,移动次数都是n-i+1。

四、顺序表的删除、思想、时间复杂度o(n)、理解算法中每条语句的含义。

(1)删除的条件:不管是静态实现还是动态实现,删除的过程都是从被删元素的下一位置向前挪动。静态是利用数组实现,动态是利用指针实现。不管静态还是动态,删除表中第i个元素,移动次数都是n-i。

五、顺序表的优缺点?为什么要引入链表?

答:顺序表的优点是可以随机存取,缺点是前提必须开辟连续的存储

空间且在第一位置做插入和删除操作时,数据的移动量特别大。

如果有一个作业是100k,但是内存最大的连续存储空间是99K,那么这个作业就不能采用顺序存储方式,必须采用链式存储方式。

六、顺序表和链表合并

七、带头结点不为空的单链表的条件是什么?L->next!=NULL;

带头结点为空的条件是什么?L->next==NULL;

不带头结点不为空的单链表的条件是什么?L!=NULL;

不带头结点为空的单链表的条件是什么?L==NULL;

带头结点的双循环链表为空的条件是?L->next==L->prior==L 头指针、头结点、首元结点(第一个结点)的概念

八、单链表中插入、删除相关操作。

九、双链表的插入和删除。

第三章栈和队列

一、栈和队列的特点、相同点和不同点。举例说明其不同点。栈的特点:先进后出或后进先出。

队列特点:先进先出。

栈和队列的相同点是只允许在端点处插入和删除元素

不同点:

二、循环队列的相关操作。

1、置空队列

Void initqueue(cirqueue *q)

{ q->front=q->rear=0;

q->count=0;

}

2、判空

int queue empty ( cirqueue *q )

{ if (q -> count = = 0 ) return (1) ;

else return (0);

}

3、判队满

int queuefull(cirqueue *q)

retuen q->count=maxsize;

4、入队

void enqueue (cirqueue * q,datatype x ){ if (q->count = = m) //判队满

{ printf(“over flow “) ; exit(0);}

q -> data [ q -> rear ] = x ;

q -> rear = ( q -> rear + 1 )% M ;

q -> count ++ ;

}

5、出队

datatype dequeue ( cirqueue * q )

{ if ( q -> count = = 0 ) //判队空

{ printf ( “ queue null “ ) ; exit (0) ; }

Temp=q -> data [ q -> font]

q -> count -- ;

q -> front = (q -> front + 1 ) %m ; //删除队头元素 }

6、取队头元素

datatype getqueue (cirqueue *q)

if ( q -> count = = 0 )

{ printf ( “ queue null “ ) ; exit (0) ; }

return q -> data [ q -> font];

}

三、理解顺序表、顺序栈、顺序队的区别?

顺序表:可以在任意合法的位置上做插入和删除。

顺序栈:只可以在顺序表的同一端上做插入和删除。

顺序队:在顺序表的一端做插入,另一端做删除。

理解链表、链栈、链队的区别?

链表:可以在任意合法的位置上做插入和删除。

链栈:只可以在链表的首结点位置做插入和删除。

链队:在链表的首结点位置做删除,尾结点后做插入。

四、(题)若用一个大小为6的数组来实现循环队列,且当前的rear和front的值分别为2和5,当从队列中删除一个元素,再插入两个元素后,rear和front的值分别为__2__、__4__。

五、(题)设环形队列数组的下标是0~N-1,其头尾指针分别为f 和r,则其元素个数为:(r-f+N)%N

第五章数组

一、数组不能做插入和删除,只能做取值和赋值操作。

二、数组只能采取顺序存储(行优先和列优先)

三、数组行优先计算公式(下标从0和1开始)

(假设每个数据元素占L个存储单元,则数组A中任一元素aij 的存储位置为:)

LOC(aij)=LOC(a11)+[(i-1)*n+j-1 ]*L

LOC(aij)=LOC(a00)+[i*n+j]*L

数组列优先计算公式(下标从0和1开始)

LOC(aij)=LOC(a11)+[(j-1)*m+i-1 ]*L

LOC(aij)=LOC(a00)+[j*m+i]*L

四、为什么要对特殊矩阵进行压缩存储?

答:主要为了节省存储空间。

五、对称矩阵和三角矩阵各长什么样?

(对称矩阵以对角线是对称的三角矩阵是非零数组成三角形)六、对称矩阵的压缩存储所需存储空间至少n(n+1)/2。

三角矩阵的压缩存储所需存储空间至少n(n+1)/2+1。

七、对称矩阵的压缩存储可以存其下三角上的元素公式

八、(题)广义表取表头和取表尾

第六章树

一、(二叉树)树的四个性质

性质1:二叉树的第i层上至多有2 i-1(i 1)个结点。

性质2:深度为k的二叉树中至多2k-1个结点。

性质3:对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1。

性质4:具有n个结点的完全二叉树的深度k为└log2n┘+1。

二、满二叉树和完全二叉树的区别是什么?

满二叉树一定是完全二叉树,但是完全二叉树不一定是满二叉树。深度为k的二叉树,最少有k个结点,最多有2k-1

深度为k的完全二叉树,最少有2k-1-1+1个结点,最多有2k-1

三、二叉树的遍历?(128页)

四、树.森林和二叉树的相互转换(138页)

五、树、森林的遍历(138页)

六、赫夫曼树(又称最优二叉树或哈夫曼树)、赫夫曼树编码

1. 赫夫曼树中,权越大的叶子离根越近,其形态不唯一,但是WPL带权路径长度一定是最小。

2.一定要会构造赫夫曼树,在构造好的赫夫曼树上会构造赫夫曼编码。(认真看题目要求)(146页)

七、递归算法设计题

1.已知二叉树中的结点类型用BiTNode表示,被定义描述为:Typedef struct BiTNode {

TElemType data ;

struct BiTNode * LChild , *RChild;

} BiTNode,*BiTree;

其中data为结点值域,LChild和RChild分别为指向左、右孩子结点的指针域,编写出求一棵二叉树高度的算法。

Int BTreeHeight(BiTree BT){

if (BT==NULL) return 0;

else {

h1=BTreeHeight(BT->LChild);

h2=BTreeHeight(BT->RChild);

if (h1>h2) return(h1+1);

else return( h2+1);

}

}

2.已知二叉树中的结点类型用BiTNode表示,被定义描述为:Typedef struct BiTNode {

TElemType data ;

struct BiTNode * LChild , *Rchild;

} BiTNode,*BiTree;

BiTree T;

其中data为结点值域,LChild和RChild分别为指向左、右孩子结点的指针域,编写算法,求出二叉树中2度结点个数。

int degree2nodenum(BiTree T)

{if (T){

if(T->lchild!=NULL &&T->child!=NULL)

count++;

leafnodenum(l->lchild);

leafnodenum(l->rchild);

}

return count;

}

3.已知二叉树中的结点类型用BiTNode表示,被定义描述为:Typedef struct BiTNode {

TElemType data ;

struct BiTNode * LChild , *RChild;

} BiTNode,*BiTree;

BiTree T;

其中data为结点值域,LChild和RChild分别为指向左、右孩子

结点的指针域,写一算法,求出二叉树中的叶子结点个数。

void BTreeLeaf (BiTree BT)

{

if(BT)

{

if(BT-> LChild==NULL && BT->RChild==NULL) count++;

BTreeLeaf (BT->LChild); // 访问左子树

BTreeLeaf (BT->RChild); // 访问右子树

}

}

或下面算法均可

编写递归算法,计算二叉树中叶子结点的数目。

int LeafCount_BiTree(Bitree T)//求二叉树中叶子结点的数目

{

if(!T) return 0; //空树没有叶子

else if(!T->lchild&&!T->rchild) return 1; //叶子结点

else return Leaf_Count(T->lchild)+Leaf_Count(T->rchild);//左子树的叶子数加上右子树的叶子数

}//LeafCount_BiTree

4.PPT上的三种遍历递归算法和课本上P131先序递归创建二叉链表。

先序遍历的递归算法:

void NLR(BinTree T){

if(T!=null){

printf("%c",T->data);

NLR(T->Lchild);

NLR(T->Rchild);

}

}

中序遍历的递归算法:

void LNR(BinTree T){

if(T!=null){

NLR(T->Lchild);

printf("%c",T->data);

NLR(T->Rchild);

}

}

后序遍历的递归算法:

void NLR(BinTree T){

if(T!=null){

NLR(T->Lchild);

NLR(T->Rchild);

printf("%c",T->data);

}

}

5.给定一棵二叉树,其根指针为root。试写出求二叉树结点数目的算法(递归算法或非递归算法)。

【提示】采用递归算法实现。

0 当二叉树为空

二叉树结点的数目=

左子树结点数目+右子树结点数目+1 当二叉树非空int count(BiTree t){

if (t==NULL)

return 0;

else

return count(t->lchild)+count(t->rchild)+1;

}

6.以二叉链表为存储结构,写一算法交换各结点的左右子树。

【分析】

依题意,设t 为一棵用二叉链表存储的二叉树,则交换各结点的左右子树的运算基于后序遍历实现:交换左子树上各结点的左右子树;交换右子树上各结点的左右子树;再交换根结点的左右子树。

【算法】

void Exchg(BiTree *t){

BinNode *p;

if (t){

P=(*t)->lchild;

(*t)->lchild=(*t)->rchild;

(*t)->rchild=p;

Exchg(&((*t)->lchild));

Exchg(&((*t)->rchild));

}

}

7.已知一棵二叉树采用二叉链表结构存储,每个结点的值为整数类型。要求:给出相应的语言描述,在此基础上设计计算二叉树中所有结点值之和的算法。

typedef struct link

{int data;

struct link * lchild;

struct link * rchild;

} bitnode , *bitree ;

void sum(bitree *bt,int &s)

{

if(bt!=0) {s=s+bt->data; sum(bt->lchild,s);

sum(bt->rchild,s);}

}

第七章图

一、图的相关概念,公式

图是一种较线性表和树更为复杂的数据数据结构。

公式: G(V,E)

二、连通、连通图、强连通、强连通图的概念、连通分量、强连通分量

连通、连通图、连通分量

◆连通:无向图中,若vi到vj有一条路径,则称vi,vj连通。

数据结构知识点总结

第一章概述 一、概念: 1.学科:数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等等。 2.概念:由某一数据对象及该对象中所有数据成员之间的关系组成。具体来说,数据结构包含三个方面的内容,即数据的逻辑结构,数据的存储结构和对数据所施加的运算。 3.这三个方面的关系为: 1)数据的逻辑结构独立于计算机,是数据本身所固有的。 2)存储结构也称为物理结构,是逻辑结构在计算机存储器中的映像,必须 依赖于计算机。 3)运算是指所施加的一组操作总称。运算的定义直接依赖于逻辑结构,但 运算的实现必依赖于存贮结构。 4.数据(data):信息的载体,指能够输入到计算机中,并被计算机识别和处理的符号的集合。例如:数字、字母、汉字、图形、图像、声音都称为数据。5.数据元素(data element):数据元素是组成数据的基本单位。 数据元素是一个数据整体中相对独立的单位。但它还可以分割成若干个具有不同

属性的项(字段),故不是组成数据的最小单位。 6.逻辑结构:从解决问题的需要出发,为实现必要的功能所建立的数据结构,它属于用户的视图,是面向对象的。 7.物理结构:指数据该如何在计算机中存放,是数据逻辑结构的物理存储方式,是属于具体实现的视图,是面向计算机的。 8.逻辑结构与存储结构二者关系:物理结构是逻辑结构的存储映象。 任何一个算法的设计取决于选定的数据(逻辑)结构,而算法的实现依赖于采用的存储结构。 9.从逻辑结构划分数据结构:线性结构和非线性结构(树、图) 10.线性结构: 1)元素之间为一对一的线性关系 2)第一个元素无直接前驱 3)最后一个元素无直接后继 11.非线性结构

数据结构复习资料复习提纲知识要点归纳

第一章数据结构概述 基本概念与术语 1.数据:数据是用来描述现实世界的文字,字符,图像,声音,以及能够输入到计算机中并能被计算机处理的符号。 2.数据元素:数据元素是数据的基本单位,是数据这个集合中的个体,也称之为元素,结点,顶点记录。 (补充:一个数据元素可由若干个数据项组成。数据项是数据的不可分割的最小单位。)3.数据对象:数据对象是具有相同性质的数据元素的集合,是数据的一个子集。(有时候也叫做属性。) 4.数据结构:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 (1)数据的逻辑结构:数据的逻辑结构是指数据元素之间存在的固有逻辑关系,常称为数据结构。 数据的逻辑结构是从数据元素之间存在的逻辑关系上描述数据与数据的存储无关,是独立于计算机的。 依据数据元素之间的关系,可以把数据的逻辑结构分成以下几种: a.集合:数据中的数据元素之间除了“同属于一个集合“的关系以外,没有其他关系。 b.线性结构:结构中的数据元素之间存在“一对一“的关系。若结构为非空集合,则除了第一个元素之外,和最后一个元素之外,其他每个元素都只有一个直接前驱和一个直接后继。 c.树形结构:结构中的数据元素之间存在“一对多“的关系。若数据为非空集,则除了第一个元素(根)之外,其它每个数据元素都只有一个直接前驱,以及多个或零个直接后继。 d.图状结构:结构中的数据元素存在“多对多”的关系。若结构为非空集,折每个数据可有多个(或零个)直接后继。 (2)数据的存储结构:数据元素及其关系在计算机内的表示称为数据的存储结构。 想要计算机处理数据,就必须把数据的逻辑结构映射为数据的存储结构。逻辑结构可以映射为以下两种存储结构: a.顺序存储结构:把逻辑上相邻的数据元素存储在物理位置也相邻的存储单元中,借助元素在存储器中的相对位置来表示数据之间的逻辑关系。 b.链式存储结构:借助指针表达数据元素之间的逻辑关系。不要求逻辑上相邻的数据元素物理位置上也相邻。 5.时间复杂度分析:a.常量阶:算法的时间复杂度与问题规模n无关系T(n)=O(1) b.线性阶:算法的时间复杂度与问题规模n成线性关系T(n)=O(n) c.平方阶和立方阶:一般为循环的嵌套,循环体最后条件为i++ 时间复杂度的大小比较: O(1)< O(log 2 n)< O(n )< O(n log 2 n)< O(n2)< O(n3)< O(2 n )

数据结构知识点总结

数据结构学习总结 壹、研究对象及基本概念 首先从数据结构是什么开始,数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。主要研究:1、数据的逻辑结构,即数据关系之间的逻辑关系;2、数据的存储结构(即物理结构),即数据的逻辑结构在计算机中的表示;3、操作算法,即插入、删除、修改、查询、排序等操作。 一、从数据的逻辑结构划分,即数据之间的逻辑关系从线性分析的角度划分主要有线性结构和非线性结构。线性结构又可细分为线性表、栈、队列、串、数组。非线性结构又可细分为树型结构和图结构。 二、从存储结构划分 各自的定义及特点: 1、顺序存储:它是把逻辑上相邻的结点存储在物理位置相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来直接体现。 优点:随机存取表中元素。缺点:插入和删除操作需要移动大量结点。 2、链式存储:它不要求逻辑上相邻的结点在物理位置上也相邻,结点间的逻辑关系是由附加的指针字段表示的。 它没有顺序存储结构所具有的弱点,但也同时失去了顺序表可随机存取的优点.插入、删除灵活 (不必移动节点,只要改变节点中的指针)。查找结点时链式存储要比顺序存储慢。 3、索引存储:除建立存储结点信息外,还建立附加的索引表来标识结点的地址。索引表由若干索引项组成。索引项的一般形式一般是关键字、地址。 线性结构: 逻辑结构 非线性结构 线性表、栈、队列、串、数组 树结构 图结构 顺序结构 链式结构 索引结构 散列结构 物理结构

4、散列存储:又称hash存储,是一种力图将数据元素的存储位置与关键码之间建立确定对应关系的查找技术。散列法存储的基本思想是:由节点的关键码值决定节点的存储地址。特点:散列是能一种快速实现访问的存储方式。 三、操作算法 1、算法定义:对特定问题求解步骤的一种描述,是指令的有限序列,其中每一条指令表示一个或多个操作。 2、五个重要特性: (1)有穷性;(2)确定性;(3)可行性;(4)输入;(5)输出。 3、算法设计要求: (1)正确性;(2)可读性;(3)健壮性;(4)效率与低存储量需求。 效率的度量: 算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。这是一个关于代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。 存储空间度量: 一个程序的空间复杂度是指运行完一个程序所需内存的大小。一个算法所需的存储空间用f(n)表示。 S(n)=O(f(n)) 其中n为问题的规模,S(n)表示空间复杂度。 四、一些基本概念 1.数据 数据是用于描述客观事物的数值、字符,以及一切可以输入到计算机中的并由计算机程序加以处理的符号的集合。其范围随着计算机技术的发展而不断发展。 2.数据元素 数据的基本单位是数据元素,在计算机程序中通常作为一个整体进行考虑和处理。 3.数据项 是数据的不可分割的最小单位,一个数据元素可由若干个数据项组成。 4.数据对象 性质相同的元素的集合叫做数据对象。 贰、线性结构 一、线性表 1.1[定义] 线性表是由n(n≥0)个相同类型的元素组成的有序集合。 记为: ( a1,a2,a3,……ai-1,ai,ai+1,…… an ) 其中:① n为线性表中元素个数,称为线性表的长度; 当n=0时,为空表,记为()。 ② ai为线性表中的元素,类型定义为elemtype

数据结构期末复习重点知识点总结

第一章绪论 一、数据结构包括:逻辑结构、存储结构、运算(操作)三方面内容。 二、线性结构特点是一对一。 树特点是一对多 图特点是多对多 三、数据结构的四种存储结构:顺序存储、链式存储、索引存储、散列存储 顺序存储结构和链式存储结构的区别? 线性结构的顺序存储结构是一种随机存取的存储结构。 线性结构的链式存储是一种顺序存取的存储结构。 逻辑结构分类:集合线性树图,各自的特点。或者分为线性结构和非线性结构。 四、算法的特征P13 五、时间复杂度 (1) i=1; k=0;

while(i

二、线性表的特点。 三、顺序表的插入、思想、时间复杂度o(n)、理解算法中每条语句的含义。 (1)插入的条件:不管是静态实现还是动态实现,插入的过程都是从最后一个元素往后挪动,腾位置。静态是利用数组实现,动态是利用指针实现。不管静态还是动态,在表中第i个位置插入,移动次数都是n-i+1。

四、顺序表的删除、思想、时间复杂度o(n)、理解算法中每条语句的含义。 (1)删除的条件:不管是静态实现还是动态实现,删除的过程都是从被删元素的下一位置向前挪动。静态是利用数组实现,动态是利用指针实现。不管静态还是动态,删除表中第i个元素,移动次数都是n-i。 五、顺序表的优缺点?为什么要引入链表? 答:顺序表的优点是可以随机存取,缺点是前提必须开辟连续的存储

数据结构知识点总结(2023版)

数据结构知识点总结数据结构知识点总结: 一、数据结构概述 数据结构定义及分类 ●线性结构 ●非线性结构 ●数组 ●链表 ●栈 ●队列 ●树 ●图 ●散列表 二、线性结构 ⒈数组 ●定义

●数组的操作:插入、删除、查找、更新●二维数组 ⒉链表 ●定义 ●特点 ●单链表 ●双链表 ●循环链表 ●链表的操作:插入、删除、查找、更新⒊栈 ●定义 ●特点 ●栈的顺序存储结构 ●栈的链式存储结构 ●栈的应用 ⒋队列

●特点 ●队列的顺序存储结构 ●队列的链式存储结构 ●队列的应用 三、非线性结构 ⒈树 ●定义 ●结点 ●树的类型:二叉树,多叉树,满二叉树,完全二叉树●二叉树的存储结构:顺序存储,链式存储 ●二叉树的遍历:先序遍历,中序遍历,后序遍历 ●二叉树的应用:赫夫曼树,二叉搜索树 ⒉图 ●定义 ●图的存储结构:邻接矩阵,邻接表 ●图的遍历:深度优先搜索,广度优先搜索

●最短路径算法 四、散列表(哈希表) ●定义 ●散列函数 ●冲突解决方法:拉链法,开放地质法 附件:无 法律名词及注释: ⒈数据结构:指在计算机科学中,数据组织、管理和存储的方式。 ⒉线性结构:数据元素之间存在一对一关系的结构。 ⒊非线性结构:数据元素之间存在一对多或多对多关系的结构。 ⒋数组:一种线性结构,由相同数据类型的元素组成,通过下 标进行访问。 ⒌链表:一种线性结构,由一系列结点构成,每个结点中包含 数据和指向下一个结点的指针。 ⒍栈:一种特殊的线性结构,只能在一端进行插入和删除操作 的数据结构。

⒎队列:一种特殊的线性结构,只能在一端进行插入操作,在另一端进行删除操作的数据结构。 ⒏树:一种非线性结构,由结点和边组成,每个结点可以有多个子结点。 ⒐图:一种非线性结构,由一组顶点和一组边组成,顶点之间可以有多种关系。 ⒑散列表:一种根据关键字直接访问数据的数据结构,通过散列函数将关键字映射到相应的存储位置。

数据结构期末复习总结知识点归纳

数据结构期末复习总结知识点归纳 数据结构是计算机科学中非常重要的一门课程,它研究数据的组织、 存储和访问方式,以及处理各种复杂问题的算法。以下是数据结构期末复 习的一些重要知识点的归纳总结: 1.基本概念: -数据结构:数据元素之间的关系的集合。 -数据元素:数据的基本单位,可以是一个字符、一个整数或一个结 构体。 -数据对象:具有相同性质的元素的集合。 -数据项:数据不可分割的最小单位。 2.数据结构的分类: -线性结构:数据元素之间存在一对一的关系,如数组、链表、堆栈 和队列。 -非线性结构:数据元素之间存在一对多或多对多的关系,如树和图。 3.常见的数据结构: -数组:一组连续的内存空间,用于存储相同类型的数据。 -链表:由节点组成,每个节点包含数据元素和指向下一个节点的指针。 -栈:一种具有先进后出(LIFO)特点的线性数据结构。 -队列:一种具有先进先出(FIFO)特点的线性数据结构。

-树:由节点和边组成,每个节点可以有多个子节点。 -图:由顶点和边组成,顶点可以有多个边连接到其他顶点。 4.常见的算法: -查找算法:包括顺序查找和二分查找。 -排序算法:包括冒泡排序、选择排序、插入排序、快速排序和归并排序。 -遍历算法:包括深度优先(DFS)和广度优先(BFS)。 5.运算特性: -空间复杂度:算法在执行过程中所需的存储空间。 -时间复杂度:算法执行所需的时间量度,通常用大O表示法表示。 6.数据结构的应用: -图的应用:用于解决路径规划、社交网络分析等问题。 -树的应用:用于解决、排序等问题。 -队列的应用:用于解决任务调度、消息传递等问题。 7.数据结构的存储方式: -顺序存储:使用连续的内存空间存储数据。 -链式存储:使用节点和指针存储数据。 8.数据结构的性能评价: -空间效率:衡量数据结构存储空间的利用率。

数据结构期末复习重点知识点总结

数据结构期末复习重点知识点总结 一、数据结构概述 数据结构是计算机科学中一门关于数据组织、存储和管理的学科。 它涉及到各种数据类型和它们之间的关系,以及对这些数据类型进行 有效操作和处理的算法。 二、基本数据结构 1. 数组 - 数组是一种线性数据结构,用于存储相同类型的数据元素。 - 数组的特点是随机访问和连续存储。 - 数组的插入和删除操作需要移动其他元素,时间复杂度为O(n)。 2. 链表 - 链表是一种线性数据结构,通过节点之间的指针链接来组织数据。 - 链表的特点是插入和删除操作简单,时间复杂度为O(1)。 - 链表分为单链表、双向链表和循环链表等不同类型。 3. 栈 - 栈是一种具有后进先出(LIFO)特性的数据结构。 - 栈的操作主要包括压栈(Push)和弹栈(Pop)两个操作。

- 栈常用于表达式求值、递归算法的实现等场景。 4. 队列 - 队列是一种具有先进先出(FIFO)特性的数据结构。 - 队列的操作主要包括入队(Enqueue)和出队(Dequeue)两个 操作。 - 队列常用于实现缓冲区、消息队列等场景。 5. 树 - 树是一种非线性的数据结构,由节点和边组成。 - 树的节点具有层级关系,由根节点、子节点和叶节点等组成。 - 常见的树结构有二叉树、红黑树、B树等。 6. 图 - 图是一种非线性的数据结构,由节点和边组成。 - 图的节点之间可以有多对多的关系。 - 图的遍历方式有深度优先搜索(DFS)和广度优先搜索(BFS)。 三、常见的数据结构算法 1. 排序算法 - 冒泡排序、插入排序、选择排序等简单但效率较低的排序算法。 - 快速排序、归并排序、堆排序等高效的排序算法。

数据结构知识点总结

数据结构知识点总结 数据结构是研究计算机中数据的表示,以及它们之间的关系,联系和操作的科学。它是计算机科学的基础。数据结构提供了一种方法来让计算机安排,组织和存储数据。有效的数据结构可以极大地改善计算机程序的性能,提高计算机系统的效率。 数据结构包括数组、链表、树和图等,为了更深入的研究,还有堆、优先队列、搜索算法和排序算法等。 1、数组 数组是一种线性结构,它是一种有序的元素集合,数组中的每一个元素都有一个索引(或下标),它们被分配到一块连续的内存空间中,索引从零开始到数组大小减一。 数组的操作有:访问数组元素,插入新元素,删除元素,更新数组元素等。它们的时间复杂度依赖于操作的次数。 2、链表 链表是一种线性结构,它可以用来存储一组有序的数据。其中每个元素都有一个指针,指向下一个元素,最后一个元素的指针指向null。 链表的操作有:插入新元素,删除元素,更新数据等,它们的时间复杂度大多是常数时间。 3、树 树是一种非线性结构,它是许多数据结构的基础,树由节点和边组成。节点是树的基本组成单元,它拥有一个或多个子节点,相连接

的子节点之间的边叫做父节点。 树的操作有:查找树中的元素,插入新元素,删除元素,更新数据等,它们的时间复杂度是O(log n),其中n是树的大小。 4、图 图是一种非线性数据结构,它是由顶点(节点)和边(连接顶点的线)组成的,它可以用来表示复杂的关系。 图的操作有:查找顶点之间的距离,查找最短路径,查找最小生成树等,大部分操作都可以使用搜索算法完成,复杂度为O(n^2)或者O(nlogn),其中n是图中顶点的数目。 5、堆 堆是一种树形结构,它以完全二叉树的形式存储数据,堆使得给定数据集中任意元素都能在线性时间内得到最大值或者最小值。 6、优先队列 优先队列是一种特殊的队列,它能让存储的数据按照优先级的高低来排序,使得最大的元素总是在队列的最前端。它一般使用堆来实现,其元素的插入和删除的时间复杂度都是O(logn)。 7、搜索算法 搜索算法是一种用于查找数据的算法,如二分搜索,它可以在有序数组中快速查找指定元素,时间复杂度为O(logn),也有其他搜索算法,如深度优先搜索和广度优先搜索。 8、排序算法 排序算法是用来将数据排序的算法,比如冒泡排序,快速排序,

数据结构知识点总结

数据结构知识点总结 一、线性结构 1. 数组 数组是线性结构中最简单、最常用的一种数据结构。它由固定数量的连续元素组成,元素可以是任何数据类型。由于数组所有元素类型相同,因此可以通过下标对其进行访问,时间复杂度为 O(1)。 数组缺点:插入、删除元素时需要移动大量元素,时间复杂度为 O(n)。 2. 队列 队列是一种先进先出的线性结构。插入操作称为入队,删除操作称为出队,它们均在队首进行,时间复杂度为 O(1)。 3. 栈 栈是一种先进后出的线性结构。插入操作称为进栈,删除操作称为出栈,它们均在栈顶进行,时间复杂度为 O(1)。 二、非线性结构 1. 树 树是一种非线性结构,由节点和边组成。树具有以下特点: ①每个节点最多只有一个父节点; ②除根节点外,每个节点都有一个父节点; ③每个节点可以有多个子节点。 2. 二叉树 二叉树是一种特殊的树,每个节点最多只有两个子节点,分别称为左子节点和右子节点。二叉树具有以下特点:

①左子树和右子树都是二叉树; ②每个节点最多只能有一个父节点; ③二叉树可以为空。 3. 堆 堆是一种树形数据结构,其中每个节点都满足一定的条件。堆分为最大堆和最小堆,它们的区别在于最大堆的父节点的值大于或等于每个子节点的值,而最小堆的父节点的值小于或等于每个子节点的值。堆可以用于实现优先队列等数据结构。堆的插入、删除操作时间复杂度为 O(log n)。 三、查找算法 1. 顺序查找 顺序查找是一种从数据结构头部开始逐一扫描的查找算法,时间复杂度为 O(n)。 2. 二分查找 二分查找是一种利用有序数据结构进行查找的算法,采用分治策略,时间复杂度为 O(log n)。 3. 哈希查找 哈希查找是一种根据关键字直接计算存储位置的查找算法,时间复杂度为 O(1)。 四、排序算法 1. 冒泡排序 冒泡排序是一种通过比较相邻元素进行交换的简单排序算法,时间复杂度为 O(n^2)。 2. 快速排序 快速排序是一种采用分治策略的高效排序算法,时间复杂度为O(n log n)。 3. 归并排序

数据结构知识点归纳总结(经典)

数据结构知识点归纳总结(经典) 1. 简介 数据结构是计算机科学中的一个重要概念,它用于组织和存储数据,以便于操作和管理。数据结构能够帮助我们更有效地处理和分析大量的数据。 2. 常见的数据结构 以下是一些常见的数据结构类型: 2.1 数组(Array) 数组是一种连续存储数据元素的数据结构,可以按照索引访问元素。它具有固定大小,可以用于存储相同类型的元素。 2.2 链表(Linked List) 链表是一种通过指针将元素连接起来的数据结构。它可以包含不同类型的元素,并且具有动态分配内存的能力。 2.3 栈(Stack)

栈是一种具有后进先出(LIFO)特性的数据结构。它只能在栈顶进行插入和删除操作。 2.4 队列(Queue) 队列是一种具有先进先出(FIFO)特性的数据结构。它可以在队尾插入元素,在队头删除元素。 2.5 树(Tree) 树是一种非线性的数据结构,它由节点和边构成。树的一个节点可以有多个子节点,但每个节点只有一个父节点。 2.6 图(Graph) 图是一种由节点和边构成的数据结构。节点之间的边可以表示节点之间的关系。 2.7 哈希表(Hash Table) 哈希表是一种以键-值对形式存储数据的数据结构。它使用哈希函数将键映射到存储位置,以实现快速的查找操作。 3. 常见的数据结构操作

数据结构不仅仅是存储数据,还包括对数据的操作。以下是一些常见的数据结构操作: - 插入元素:向数据结构中添加新元素。 - 删除元素:从数据结构中删除指定元素。 - 查找元素:在数据结构中查找指定元素。 - 遍历元素:按照特定的顺序访问数据结构中的所有元素。 - 排序元素:对数据结构中的元素进行排序。 - 合并结构:将两个或多个数据结构合并成一个。 - 分割结构:将一个数据结构分割成两个或多个。 4. 数据结构的应用 数据结构在计算机科学中有广泛的应用,包括但不限于以下领域: - 数据库系统 - 图像处理 - 网络通信 - 操作系统 - 算法设计和分析

数据结构知识点归纳

数据结构知识点归纳数据结构知识点归纳 1.线性数据结构 1.1 数组 1.1.1 基本操作 1.1.2 时间复杂度 1.1.3 动态数组 1.1.4 多维数组 1.2 链表 1.2.1 单向链表 1.2.2 双向链表 1.2.3 循环链表 1.2.4 基本操作 1.2.5 时间复杂度 1.3 栈 1.3.1 基本操作

1.3.2 应用场景 1.4 队列 1.4.1 基本操作 1.4.2 队列的实现方式 1.4.3 阻塞队列 1.4.4 并发队列 2.树形数据结构 2.1 二叉树 2.1.1 基本概念 2.1.2 二叉树的遍历 2.1.3 二叉树的构建方式 2.2 堆 2.2.1 最大堆和最小堆 2.2.2 堆的实现方式 2.2.3 堆的应用场景 2.3 平衡二叉树 2.3.1 AVL树

2.3.2 红黑树 2.4 B树和B+树 2.4.1 基本概念 2.4.2 B树的插入和删除操作 2.4.3 B+树的优势和应用场景 3.图形数据结构 3.1 无向图和有向图 3.2 图的遍历 3.2.1 深度优先搜索(DFS) 3.2.2 广度优先搜索(BFS) 3.3 最短路径算法 3.3.1 Dijkstra算法 3.3.2 Floyd-Warshall算法 3.4 最小树算法 3.4.1 Prim算法 3.4.2 Kruskal算法 4.散列数据结构

4.1 散列表 4.1.1 基本概念 4.1.2 散列函数的设计与应用 4.1.3 碰撞解决方法 4.2 布隆过滤器 4.2.1 基本原理 4.2.2 应用场景 4.3 哈希算法 4.3.1 基本概念 4.3.2 常见的哈希算法 5.高级数据结构 5.1 树状数组(BIT) 5.1.1 基本原理 5.1.2 树状数组的应用 5.2 线段树 5.2.1 基本原理 5.2.2 线段树的构建和查询操作

数据结构知识点全面总结—精华版

数据结构知识点全面总结—精华版 数据结构知识点全面总结—精华版 一、引言 数据结构是计算机科学的基础,它研究的是如何在计算机中有效地存储和处理数据。随着信息技术的发展,数据结构在各个领域中的应用越来越广泛。本文将全面总结数据结构的基本概念、常见数据结构以及算法与程序设计等内容,帮助读者更好地理解和应用数据结构。 二、基本概念 1、数据结构:指在计算机中表示和组织数据的方式。数据结构包括数据的组织形式、存储方式以及访问方式等。 2、数据类型:指根据数据的性质和表示方法的不同,将数据分为不同的类型,如整型、浮点型、字符型等。 3、抽象数据类型(ADT):指将实际的数据类型及其操作封装在一起,形成一个具有特定名称的抽象数据类型,提供一致的接口,隐藏其实现细节。 三、常见数据结构 1、数组:连续的内存空间中一段有序的元素集合,支持随机访问和顺序访问。

2、链表:由一系列节点组成,每个节点包含数据域和指针域,指针域指向下一个节点。链表支持高效的首尾访问,但插入和删除操作需要移动大量元素。 3、队列:先进先出(FIFO)的线性表,支持在一端插入元素,在另一端删除元素。队列常用于实现消息队列、任务队列等。 4、栈:后进先出(LIFO)的线性表,支持在一端插入和删除元素。栈常用于实现函数调用、表达式计算等。 5、树:一种非线性的数据结构,用于模拟具有层次关系的数据。树中的每个节点有零个或多个子节点,每个子节点对应其父节点的一个属性。常见的树形结构有二叉树、三叉树等。 6、图:一种非线性的数据结构,用于表示具有任意拓扑关系的数据。图由一系列顶点和边组成,顶点表示元素,边表示元素之间的关系。常见的图形结构有邻接矩阵、邻接表等。 7、散列表:一种根据键(Key)直接访问值(Value)的数据结构。散列表通过将键映射为桶中的索引来实现快速访问。常见的散列算法有MD5、SHA-1等。 四、算法与程序设计 1、算法分析:评估算法的效率、空间复杂度等指标,用于优化算法和选择合适的算法。常见的时间复杂度有O(1)、O(n)、O(nlogn)等。

期末数据结构复习总结

数据结构 第一章 1、数据是描述客观事物的数和字符的集合 2、数据项:是具有独立含义的数据最小单位,也称为字段或域 3、数据对象:指性质相同的数据元数的集合,是数据的一个子集 4、数据结构:指所有数据元素以及数据元素之间的关系 5、数据的逻辑结构:由数据元素之间的逻辑关系构成 6、数据的存储结构:数据元素及其关系在计算机存储器中的存储表示,称为物理结构 逻辑结构的表达方式: 1、图表表示:采用表格或图形直接描述数据的逻辑关系。 2、二元组表示:通用的数据逻辑结构表示方式: R={r},r={<010,021>,<021,027>,<027,029>} 逻辑结构的类型: 1、集合:指数据元素之间除了“同属于一个集合”的关系以外别无其他关系。

2、线性结构:一对一关系,只有一个前驱和一个后继元素。 3、树形结构:多对多关系,除了开始元素以外,都只有一个前驱和多个后继元素。 什么是算法:是问题求解步骤的描述,是指令的有限序列。 1、有穷性:执行有穷步后结束 2、确定性:不能有二义性 3、可行性:算法可以通过有限次的操作完成其功能,能够被重复地执行 4、有输入:一个算法有0个或多个输入 5、有输出:一个算法有一个或多个输出 算法设计的目标:正确性(算法能正确执行)、可使用性(方便地使用)、可读性(算法易于理解)、健壮性(有好的容错性,不会异常中断或死机)、高效率与低存储量需求(算法的执行时间和存储空间) 算法时间性分析方法:事后统计法(缺点:必须执行、存在很多因素掩盖算法本质)、事前估算法(仅考虑算法本身的效率高低、只依赖于问题的规模) 第二章

线性表:具有相同特性的数据元素的一个有限序列 有序表:指线性表中的所有元素按递增或剃减方式有序排列 顺序表:线性表的顺序存储结构简称为顺序表(下标从0开始),从逻辑上相邻的元素对应的物理存储位置也相邻,当进行插入或删除的操作时要平均移动半个表的元素,相当费时。 链表:线性表的链式存储结构称为链表,拥有唯一的标识头指针(head pointer),相应的指向开始结点(first pointer),指向尾结点的称为尾指针(tail pointer)。逻辑上相邻的元素的物理存储位置通过指针来链接,结点的存储位置可以任意安排,插入或删除时只需修改相关指针,方便又省时。 1、单链表:有一个指针域,指向其后继结点(next),分为头插法和尾插法 插入结点的操作:s->next=p->next ; p->next-s; 删除结点的操作:p->next=p->next->next; 删除结点后还应释放结点:q=p->next ; p->next=q->next; free(q)(头插入的话把q改为L) 尾插入:s->data=a[i] ; r->next=s ; r=s;

数据结构期末总结范文通用10篇

数据结构期末总结范文通用10篇 (经典版) 编制人:__________________ 审核人:__________________ 审批人:__________________ 编制单位:__________________ 编制时间:____年____月____日 序言 下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢! 并且,本店铺为大家提供各种类型的经典范文,如工作总结、工作计划、合同协议、条据文书、策划方案、句子大全、作文大全、诗词歌赋、教案资料、其他范文等等,想了解不同范文格式和写法,敬请关注! Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! Moreover, our store provides various types of classic sample essays for everyone, such as work summaries, work plans, contract agreements, doctrinal documents, planning plans, complete sentences, complete compositions, poems, songs, teaching materials, and other sample essays. If you want to learn about different sample formats and writing methods, please stay tuned!

(完整版)数据结构知识点总结

数据结构知识点概括 第一章概论 数据就是指能够被计算机识别、存储和加工处理的信息的载体。 数据元素是数据的基本单位,可以由若干个数据项组成。数据项是具有独立含义的最小标识单位。 数据结构的定义: ·逻辑结构:从逻辑结构上描述数据,独立于计算机。·线性结构:一对一关系。 ·线性结构:多对多关系。 ·存储结构:是逻辑结构用计算机语言的实现。·顺序存储结构:如数组。 ·链式存储结构:如链表。 ·索引存储结构:·稠密索引:每个结点都有索引项。 ·稀疏索引:每组结点都有索引项。 ·散列存储结构:如散列表。 ·数据运算。 ·对数据的操作。定义在逻辑结构上,每种逻辑结构都有一个运算集合。 ·常用的有:检索、插入、删除、更新、排序。 数据类型:是一个值的集合以及在这些值上定义的一组操作的总称。 ·结构类型:由用户借助于描述机制定义,是导出类型。 抽象数据类型ADT:·是抽象数据的组织和与之的操作。相当于在概念层上描述问题。 ·优点是将数据和操作封装在一起实现了信息隐藏。 程序设计的实质是对实际问题选择一种好的数据结构,设计一个好的算法。算法取决于数据结构。 算法是一个良定义的计算过程,以一个或多个值输入,并以一个或多个值输出。 评价算法的好坏的因素:·算法是正确的; ·执行算法的时间; ·执行算法的存储空间(主要是辅助存储空间); ·算法易于理解、编码、调试。 时间复杂度:是某个算法的时间耗费,它是该算法所求解问题规模n的函数。 渐近时间复杂度:是指当问题规模趋向无穷大时,该算法时间复杂度的数量级。 评价一个算法的时间性能时,主要标准就是算法的渐近时间复杂度。 算法中语句的频度不仅与问题规模有关,还与输入实例中各元素的取值相关。 时间复杂度按数量级递增排列依次为:常数阶O(1)、对数阶O(log2n)、线性阶O(n)、线性对数阶O(nlog2n)、平方阶O(n^2)、立方阶O(n^3)、……k次方阶O(n^k)、指数阶O(2^n)。 空间复杂度:是某个算法的空间耗费,它是该算法所求解问题规模n的函数。 算法的时间复杂度和空间复杂度合称算法复杂度。 第二章线性表 线性表是由n≥0个数据元素组成的有限序列。 n=0是空表;非空表,只能有一个开始结点,有且只能有一个终端结点。 线性表上定义的基本运算: ·构造空表:Initlist(L) ·求表长:Listlength(L) ·取结点:GetNode(L,i) ·查找:LocateNode(L,x) ·插入:InsertList(L,x,i) ·删除:Delete(L,i) 顺序表是按线性表的逻辑结构次序依次存放在一组地址连续的存储单元中。在存储单元中的各元素的物理位置和 逻辑结构中各结点相邻关系是一致的。地址计算:LOCa(i)=LOCa(1)+(i-1)*d;(首地址为1) 在顺序表中实现的基本运算: ·插入:平均移动结点次数为n/2;平均时间复杂度均为O(n)。 ·删除:平均移动结点次数为(n-1)/2;平均时间复杂度均为O(n)。 线性表的链式存储结构中结点的逻辑次序和物理次序不一定相同,为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还存储了其后继结点的地址信息(即指针或链)。这两部分信息组成链表中的结点结构。 一个单链表由头指针的名字来命名。 单链表运算: ·建立单链表·头插法:s->next=head;head=s;生成的顺序与输入顺序相反。平均时间复杂度均为O(n)。 ·尾插法:head=rear=null;if(head=null)head=s;else r->next=s;r=s;平均时间复杂度均为O(n)·加头结点的算法:对开始结点的操作无需特殊处理,统一了空表和非空表。 ·查找·按序号:与查找位置有关,平均时间复杂度均为O(n)。 ·按值:与输入实例有关,平均时间复杂度均为O(n)。 ·插入运算:p=GetNode(L,i-1);s->next=p->next;p->next=s;平均时间复杂度均为O(n) ·删除运算:p=GetNode(L,i-1);r=p->next;p->next=r->next;free(r);平均时间复杂度均为O(n) 单循环链表是一种首尾相接的单链表,终端结点的指针域指向开始结点或头结点。链表终止条件是以指针等于头指针或尾指针。 采用单循环链表在实用中多采用尾指针表示单循环链表。优点是查找头指针和尾指针的时间都是O(1),不用 遍历整个链表。 双链表就是双向链表,就是在单链表的每个结点里再增加一个指向其直接前趋的指针域prior,形成两条不同方 向的链。由头指针head惟一确定。 双链表也可以头尾相链接构成双(向)循环链表。 双链表上的插入和删除时间复杂度均为O (1)。 顺序表和链表的比较:·基于空间: ·顺序表的存储空间是静态分配,存储密度为1;适于线性表事先确定其大小时采用。 ·链表的存储空间是动态分配,存储密度<1;适于线性表长度变化大时采用。 ·基于时间: ·顺序表是随机存储结构,当线性表的操作主要是查找时,宜采用。 ·以插入和删除操作为主的线性表宜采用链表做存储结构。 ·若插入和删除主要发生在表的首尾两端,则宜采用尾指针表示的单循环链表。

(完整word版)大学数据结构期末知识点重点总结(考试专用)

第一章概论 1。数据结构描述的是按照一定逻辑关系组织起来的待处理数据元素的表示及相关操作,涉及数据的逻辑结构、存储结构和运算 2。数据的逻辑结构是从具体问题抽象出来的数学模型,反映了事物的组成结构及事物之间的逻辑关系 可以用一组数据(结点集合K)以及这些数据之间的一组二元关系(关系集合R)来表示:(K, R) 结点集K是由有限个结点组成的集合,每一个结点代表一个数据或一组有明确结构的数据 关系集R是定义在集合K上的一组关系,其中每个关系r(r∈R)都是K×K上的二元关系 3.数据类型 a。基本数据类型 整数类型(integer)、实数类型(real)、布尔类型(boolean)、字符类型(char)、指针类型(pointer)b。复合数据类型 复合类型是由基本数据类型组合而成的数据类型;复合数据类型本身,又可参与定义结构更为复杂的结点类型 4.数据结构的分类:线性结构(一对一)、树型结构(一对多)、图结构(多对多) 5。四种基本存储映射方法:顺序、链接、索引、散列 6。算法的特性:通用性、有效性、确定性、有穷性 7.算法分析:目的是从解决同一个问题的不同算法中选择比较适合的一种,或者对原始算法进行改造、加工、使其优化 8.渐进算法分析 a.大Ο分析法:上限,表明最坏情况 b.Ω分析法:下限,表明最好情况 c.Θ分析法:当上限和下限相同时,表明平均情况 第二章线性表 1.线性结构的基本特征 a.集合中必存在唯一的一个“第一元素” b。集合中必存在唯一的一个“最后元素" c.除最后元素之外,均有唯一的后继 d。除第一元素之外,均有唯一的前驱 2.线性结构的基本特点:均匀性、有序性 3。顺序表 a.主要特性:元素的类型相同;元素顺序地存储在连续存储空间中,每一个元素唯一的索引值;使用常数作为向量长度 b。线性表中任意元素的存储位置:Loc(ki)= Loc(k0)+ i * L(设每个元素需占用L个存储单元) c. 线性表的优缺点: 优点:逻辑结构与存储结构一致;属于随机存取方式,即查找每个元素所花时间基本一样 缺点:空间难以扩充 d.检索:ASL=【Ο(1)】 e。插入:插入前检查是否满了,插入时插入处后的表需要复制【Ο(n)】 f.删除:删除前检查是否是空的,删除时直接覆盖就行了【Ο(n)】 4。链表 4。1单链表 a。特点:逻辑顺序与物理顺序有可能不一致;属于顺序存取的存储结构,即存取每个数据元素所花费的时间不相等 b.带头结点的怎么判定空表:head和tail指向单链表的头结点 c。链表的插入(q—>next=p—〉next; p-〉next=q;)【Ο(n)】 d。链表的删除(q=p—〉next;p-〉next = q-〉next; delete q;)【Ο(n)】e。不足:next仅指向后继,不能有效找到前驱 4.2双链表 a.增加前驱指针,弥补单链表的不足 b.带头结点的怎么判定空表:head和tail指向单链 表的头结点 c.插入:(q->next = p-〉next;q—〉prev = p; p->next = q;q—〉next-〉prev = q;) d.删除:(p->prev->next = p-〉next; p-〉next —〉prev = p—〉prev; p->prev = p-〉next = NULL;delete p;) 4.3顺序表和链表的比较 4。3。1主要优点 a.顺序表的主要优点 没用使用指针,不用花费附加开销;线性表元素的 读访问非常简洁便利 b.链表的主要优点 无需事先了解线性表的长度;允许线性表的长度有 很大变化;能够适应经常插入删除内部元素的情况 4。3。2应用场合的选择 a。不宜使用顺序表的场合 经常插入删除时,不宜使用顺序表;线性表的最大 长度也是一个重要因素 b.不宜使用链表的场合 当不经常插入删除时,不应选择链表;当指针的存储 开销与整个结点内容所占空间相比其比例较大时, 应该慎重选择 第三章栈与队列 1。栈 a.栈是一种限定仅在一端进行插入和删除操作的线 性表;其特点后进先出;插入:入栈(压栈);删除: 出栈(退栈);插入、删除一端被称为栈顶(浮动), 另一端称为栈底(固定);实现分为顺序栈和链式栈 两种 b.应用: 1)数制转换 while (N){ N%8入栈; N=N/8;} while (栈非空){ 出栈; 输出;} 2)括号匹配检验 不匹配情况:各类括号数量不同;嵌套关系不正确 算法: 逐一处理表达式中的每个字符ch: ch=非括号:不做任何处理 ch=左括号:入栈 ch=右括号:if (栈空) return false else { 出栈,检查匹配情况, if (不匹配)return false } 如果结束后,栈非空,返回false 3)表达式求值 3.1中缀表达式: 计算规则:先括号内,再括号外;同层按照优先级, 即先乘*、除/,后加+、减—;相同优先级依据结合 律,左结合律即为先左后右 3.2后缀表达式: 〈表达式〉::= 〈项〉<项〉+ | 〈项〉〈项〉 -|〈项〉 〈项> ::= 〈因子〉<因子> * |<因子><因 子>/|<因子〉 〈因子> ::= <常数〉•〈常数〉::= <数字>| <数字〉<常数> 〈数字> ∷= 0 |1 |2 |3 |4 | 5 | 6 | 7 |8 |9 3。3中缀表达式转换为后缀表达式 InfixExp为中缀表达式,PostfixExp为后缀表达式 初始化操作数栈OP,运算符栈OPND;OPND。 push('#'); 读取InfixExp表达式的一项 操作数:直接输出到PostfixExp中; 操作符: 当‘(':入OPND; 当‘)’:OPND此时若空,则出错;OPND若非空, 栈中元素依次弹出,输入PostfixExpz中,直到遇 到‘(’为止;若为‘(’,弹出即可 当‘四则运算符’:循环(当栈非空且栈顶不是‘(’ && 当前运算符优先级>栈顶运算符优先级),反 复弹出栈顶运算符并输入到PostfixExp中,再将当 前运算符压入栈 3.4后缀表达式求值 初始化操作数栈OP; while (表达式没有处理完){ item = 读取表达式一项; 操作数:入栈OP; 运算符:退出两个操作数, 计算,并将结果入栈} c.递归使用的场合:定义是递归的;数据结构是递 归的;解决问题的方法是递归的 2.队列 a.若线性表的插入操作在一端进行,删除操作在另 一端进行,则称此线性表为队列 b。循环队列判断队满对空: 队空:front==rear;队满:(rear+1)%n==front 第五章二叉树 1。概念 a. 一个结点的子树的个数称为度数 b.二叉树的高度定义为二叉树中层数最大的叶结点 的层数加1 c。二叉树的深度定义为二叉树中层数最大的叶结点 的层数 d.如果一棵二叉树的任何结点,或者是树叶,或者恰 有两棵非空子树,则此二叉树称作满二叉树 e.如果一颗二叉树最多只有最下面的两层结点度数 可以小于2;最下面一层的结点都集中在该层最左 边的位置上,则称此二叉树为完全二叉树 f.当二叉树里出现空的子树时,就增加新的、特殊的 结点——空树叶组成扩充二叉树,扩充二叉树是满 二叉树 外部路径长度E:从扩充的二叉树的根到每个外部 结点(新增的空树叶)的路径长度之和 内部路径长度I:扩充的二叉树中从根到每个内部 结点(原来二叉树结点)的路径长度之和 2.性质 a。二叉树的第i层(根为第0层,i≥0)最多有 2^i个结点 b。深度为k的二叉树至多有2k+1—1个结点 c. 任何一颗二叉树,度为0的结点比度为2的结点 多一个。n0 = n2 + 1 d。满二叉树定理:非空满二叉树树叶数等于其分 支结点数加1 e。满二叉树定理推论:一个非空二叉树的空子树 (指针)数目等于其结点数加1 f. 有n个结点(n〉0)的完全二叉树的高度为⌈log2 (n+1)⌉,深度为⌈log2(n+1)⌉−1 g。对于具有n个结点的完全二叉树,结点按层次由 左到右编号,则有: 1) 如果i = 0为根结点;如果i〉0,其父结点编号 是(i—1)/2 2)当2i+1

相关主题
文本预览
相关文档 最新文档