数据结构考试重点必背

合集下载

408背诵笔记

408背诵笔记

408背诵笔记
408背诵笔记:
1. 数据结构:
数据结构的基本概念:数据结构是数据元素的集合及定义在此集合上的基本操作。

线性结构:数组、链表、栈、队列。

非线性结构:树、图、散列表。

2. 算法:
算法的时间复杂度:描述算法运行时间随输入规模变化的规律。

算法的空间复杂度:描述算法所需存储空间随输入规模变化的规律。

3. 操作系统:
进程管理:进程的概念、状态、转换、创建与终止。

内存管理:内存的分配与回收、虚拟内存。

文件管理:文件的逻辑结构、物理结构及文件系统的功能。

4. 计算机组成原理:
CPU:指令系统、指令流水线、指令周期。

存储器层次结构:主存、高速缓存、辅存。

I/O 原理:I/O 设备分类、I/O 控制方式、设备驱动程序。

5. 计算机网络:
网络协议:TCP/IP 协议族、应用层协议(HTTP、FTP、SMTP)。

网络设备:路由器、交换机、网关。

网络安全:加密技术、数字签名、防火墙。

6. 数据库系统:
关系数据库模型:关系模型的基本概念、关系代数、关系演算。

数据库设计:需求分析、概念设计、逻辑设计、物理设计。

数据库管理系统:功能组件、数据字典、查询处理过程。

数据结构考研复习重点归纳

数据结构考研复习重点归纳

数据结构考研复习重点归纳数据结构是计算机科学中非常重要的一门基础课程,考研复习数据结构时,需要重点掌握的内容有以下几个方面。

1.线性表:线性表是数据结构中最基本的一种结构,常见的线性表有数组、链表和栈等。

考生需要掌握线性表的定义、插入、删除、查找等基本操作,并能够分析它们的时间复杂度。

2.树:树是一种非常重要且常见的数据结构,它具有分层结构和层次关系。

其中,二叉树是最简单也是最基本的一种树结构,树的遍历(如前序遍历、中序遍历和后序遍历)是树算法中的重要内容。

此外,还要了解一些特殊的树结构,如平衡树和B树等。

3.图:图是由节点和边组成的一种数据结构,它是一种非常灵活的结构,常用来表示各种实际问题中的关系。

在考研复习中,需要掌握图的基本概念(如顶点和边)、图的存储结构(如邻接矩阵和邻接表)以及图的遍历算法(如深度优先和广度优先)等。

4.查找和排序:在实际问题中,经常需要查找和排序数据。

查找算法(如顺序查找、二分查找和哈希查找)和排序算法(如冒泡排序、插入排序和快速排序)是数据结构中常见的算法,考生需要熟练掌握这些算法的原理和实现方法。

此外,还要了解一些高级的查找和排序算法,如二叉查找树和归并排序等。

5.散列表:散列表(也称哈希表)是一种特殊的数据结构,它利用散列函数将数据映射到一个固定大小的数组中。

散列表具有快速的查找和插入操作,常用于实现字典和数据库等应用。

在考研复习中,需要了解散列表的原理和实现方法,以及处理冲突的方法,如链地址法和开放地址法。

6.动态规划:动态规划是一种解决问题的数学方法,也是一种重要的算法思想。

在考研复习中,需要掌握动态规划的基本原理和解题思路,以及常见的动态规划算法,如背包问题和最长公共子序列等。

7.算法复杂度分析:在考研复习中,需要有一定的算法分析能力,能够对算法的时间复杂度和空间复杂度进行分析和估算。

此外,还要能够比较不同算法的效率,并选择合适的算法来解决实际问题。

除了以上重点内容,考生还要注意掌握一些基本的编程知识,如指针、递归和动态内存分配等。

数据结构考试要点

数据结构考试要点

第一章:数据结构包含:逻辑结构,数据的存储结构,对数据进行的操作。

数据元素:相对独立的基本单位,即可简单也可复杂,简单的数据元素只有一个数据项,数据项是数据的不可分割的最小单位。

数据对象:性质相同的数据元素的集合。

数据结构:相互存在一种或者多种特定关系的数据元素的集合(集合,线性结构,树结构,图结构)。

顺序存储结构:数据元素按照逻辑顺序依次存放在存储器的一段连续存储单元中。

链式存储结构:存储在存储空间的任意位置上,包含一个数据域和至少一个指针域,要访问,必须从第一个元素开始查找。

数据类型:一组值加一组操作。

第二章:线性表:有限多个性质相同的数据元素构成的一个序列,数据元素的个数就是长度。

线性表的顺序存储结构:用一组地址连续的存储单元能随机存取的结构。

链式存储结构:具有链式存储结构的线性表称为链表,是用一组地址任意的存储单元来存线性表中的数据元素。

每个数据元素存储结构包括数据元素信息域和地址域,存放一个数据元素的存储结构称为结点,每个结点只定义一个指针域,存放的是当前结点的直接后记结点的地址(直接后继结点),线性表的最后一个结点指针域存放空(0,NULL)标志结束。

不支持随机存取,访问必须从第一个结点开始,一次访问。

双向链表:每个结点设置两个方向的指针(直接前驱和直接后继)。

第三章:栈:堆栈的简称,限定在表尾进行插入和删除的线性表。

特点是后进先出。

当栈定指针指向栈底时,为空栈。

队列:限定只能在一端进行插入和在另一端进行删除的线性表,进行插入的是队尾,删除的是队头。

特点是先进先出。

队列的链式结构:用一个链表依次存放从队头到队尾的所有的数据元素。

存放队头地址(队头指针)队尾地址(队尾指针),空链队列:有头结点,空队列条件是头结点存放0,无头结点为队头指针指向空。

队列的顺序存储结构:用一组地址连续的存储空间依次存放从队头到队尾的所有数据元素,再用队头指针和队尾指针记录队头和队尾的位置。

队头指针指向队头元素前一个数组元素的位置,队尾始终指向队尾,当队尾和队头指向同一位置,空队列。

考研数据结构图的必背算法及知识点

考研数据结构图的必背算法及知识点

考研数据结构图的必背算法及知识点Prepared on 22 November 20201.最小生成树:无向连通图的所有生成树中有一棵边的权值总和最小的生成树问题背景:假设要在n个城市之间建立通信联络网,则连通n个城市只需要n—1条线路。

这时,自然会考虑这样一个问题,如何在最节省经费的前提下建立这个通信网。

在每两个城市之间都可以设置一条线路,相应地都要付出一定的经济代价。

n个城市之间,最多可能设置n(n-1)/2条线路,那么,如何在这些可能的线路中选择n-1条,以使总的耗费最少呢分析问题(建立模型):可以用连通网来表示n个城市以及n个城市间可能设置的通信线路,其中网的顶点表示城市,边表示两城市之间的线路,赋于边的权值表示相应的代价。

对于n个顶点的连通网可以建立许多不同的生成树,每一棵生成树都可以是一个通信网。

即无向连通图的生成树不是唯一的。

连通图的一次遍历所经过的边的集合及图中所有顶点的集合就构成了该图的一棵生成树,对连通图的不同遍历,就可能得到不同的生成树。

图G5无向连通图的生成树为(a)、(b)和(c)图所示:G5G5的三棵生成树:可以证明,对于有n个顶点的无向连通图,无论其生成树的形态如何,所有生成树中都有且仅有n-1条边。

最小生成树的定义:如果无向连通图是一个网,那么,它的所有生成树中必有一棵边的权值总和最小的生成树,我们称这棵生成树为最小生成树,简称为最小生成树。

最小生成树的性质:假设N=(V,{E})是个连通网,U是顶点集合V的一个非空子集,若(u,v)是个一条具有最小权值(代价)的边,其中,则必存在一棵包含边(u,v)的最小生成树。

解决方案:两种常用的构造最小生成树的算法:普里姆(Prim)和克鲁斯卡尔(Kruskal)。

他们都利用了最小生成树的性质1.普里姆(Prim)算法:有线到点,适合边稠密。

时间复杂度O(N^2)假设G=(V,E)为连通图,其中V为网图中所有顶点的集合,E为网图中所有带权边的集合。

数据结构必考知识点总结

数据结构必考知识点总结

数据结构必考知识点总结在准备考试时,了解数据结构的基本概念和相关算法是非常重要的。

以下是一些数据结构的必考知识点总结:1. 基本概念数据结构的基本概念是非常重要的,包括数据、数据元素、数据项、数据对象、数据类型、抽象数据类型等的概念。

了解这些概念有助于更好地理解数据结构的本质和作用。

2. 线性表线性表是数据结构中最基本的一种,它包括顺序表和链表两种实现方式。

顺序表是将数据元素存放在一块连续的存储空间内,而链表是将数据元素存放在若干个节点中,每个节点包含数据和指向下一个节点的指针。

了解线性表的概念和基本操作是非常重要的。

3. 栈和队列栈和队列是两种特殊的线性表,它们分别具有后进先出和先进先出的特性。

栈和队列的实现方式有多种,包括数组和链表。

掌握栈和队列的基本操作和应用是数据结构的基本内容之一。

4. 树结构树是一种非线性的数据结构,它包括二叉树、多路树、二叉搜索树等多种形式。

了解树的基本定义和遍历算法是必考的知识点。

5. 图结构图是一种非线性的数据结构,它包括有向图和无向图两种形式。

了解图的基本概念和相关算法是非常重要的,包括图的存储方式、遍历算法、最短路径算法等。

6. 排序算法排序是一个非常重要的算法问题,掌握各种排序算法的原理和实现方式是必不可少的。

常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。

7. 查找算法查找是另一个重要的算法问题,包括顺序查找、二分查找、哈希查找、树查找等。

了解各种查找算法的原理和实现方式是必考的知识点之一。

8. 算法复杂度分析算法的时间复杂度和空间复杂度是评价算法性能的重要指标,掌握复杂度分析的方法和技巧是非常重要的。

9. 抽象数据类型ADT是数据结构的一种概念模型,它包括数据的定义和基本操作的描述。

了解ADT的概念和实现方式是非常重要的。

10. 动态存储管理动态存储管理是数据结构中一个重要的问题,包括内存分配、内存释放、内存回收等。

了解动态存储管理的基本原理和实现方式是必考的知识点之一。

数据结构考试重点必背

数据结构考试重点必背

:数据结构课程的任务是:讨论数据的各种逻辑结构、在计算机中的存储结构以及各种操作的算法设计。

:数据:是客观描述事物的数字、字符以及所有的能输入到计算机中并能被计算机接收的各种集合的统称。

数据元素:表示一个事物的一组数据称作是一个数据元素,是数据的基本单位。

数据项:是数据元素中有独立含义的、不可分割的最小标识单位。

数据结构概念包含三个方面:数据的逻辑结构、数据的存储结构的数据的操作。

数据的逻辑结构指数据元素之间的逻辑关系,用一个数据元素的集合定义在此集合上的若干关系来表示,数据结构可以分为三种:线性结构、树结构和图。

:数据元素及其关系在计算机中的存储表示称为数据的存储结构,也称为物理结构。

数据的存储结构基本形式有两种:顺序存储结构和链式存储结构。

:算法:一个算法是一个有穷规则的集合,其规则确定一个解决某一特定类型问题的操作序列。

算法规则需满足以下五个特性:输入——算法有零个或多个输入数据。

输出——算法有一个或多个输出数据,与输入数据有某种特定关系。

有穷性——算法必须在执行又穷步之后结束。

确定性——算法的每个步骤必须含义明确,无二义性。

可行性——算法的每步操作必须是基本的,它们的原则上都能够精确地进行,用笔和纸做有穷次就可以完成。

有穷性和可行性是算法最重要的两个特征。

:算法与数据结构:算法建立数据结构之上,对数据结构的操作需用算法来描述。

算法设计依赖数据的逻辑结构,算法实现依赖数据结构的存储结构。

:算法的设计应满足五个目标:正确性:算法应确切的满足应用问题的需求,这是算法设计的基本目标。

健壮性:即使输入数据不合适,算法也能做出适当的处理,不会导致不可控结高时间效率:算法的执行时间越短,时间效率越高。

果。

高空间效率:算法执行时占用的存储空间越少,空间效率越高。

可读性:算法的可读性有利于人们对算法的理解。

:度量算法的时间效率,时间复杂度,(课本39页)。

:递归定义:即用一个概念本身直接或间接地定义它自己。

数据结构考研笔记整理(全)

数据结构考研笔记整理(全)

数据结构考研笔记整理(全)一、第二章线性表●考纲内容●一、线性表的基本概念●线性表是具有相同数据结构类型的n个数据元素的有限序列;线性表为逻辑结构,实现线性表的存储结构为顺序表或者链表●二、线性表的实现●1、顺序表●定义(静态分配)●#define MaxSize 50 \\ typedef struct{ \\ ElemType data[MaxSize];\\ intlength;\\ }SqList;●定义(动态分配)●#define MaxSize 50\\ typedef strcut{\\ EleType *data; //指示动态非配数组的指针\\ int MaxSize,length;\\ }SqList;●c的动态分配语句为L.data=(ElemType*)malloc(sizeof(ElemType)*InitSize);●c++动态分配语句为L.data=new ElemType[InitSize];●插入操作●删除操作●按值寻找●2、链表●单链表●单链表的定义●●头插法建立单链表●●尾插法建立单链表●●按序号查找getElem(LinkList L,int i)和按值查找locateElem(LinkListL,ElemType e)●插入结点(后插)●p=getElem(L,i-1); //查找插入位置的前驱结点\\ s.next=p.next;\\p.next=s;●将前插操作转化为后插操作,即先将s插入的p的后面然后调换s和p的数据域●s.next=p.next;\\ p.next=s.next;\\ temp=p.data;\\ p.data=s.data;\\s.data=temp;●删除结点●p.getElem(L,i-1);\\ q=p.next;\\ p.next=q.next;\\ free(q);●双链表(结点中有prior指针和next指针)●循环链表●静态链表●借助数组来描述线性表的链式存储结构,结点中的指针域next为下一个元素的数组下标●三、线性表的应用●使用的时候如何选择链表还是顺序表?●表长难以估计,经常需要增加、删除操作——链表;表长可以估计,查询比较多——顺序表●链表的头插法,尾插法,逆置法,归并法,双指针法;顺序表结合排序算法和查找算法的应用●小知识点(选择题)二、第三章栈,队列和数组●考纲内容●一、栈和队列的基本概念●栈:后进先出,LIFO,逻辑结构上是一种操作受限的线性表●队列:先进先出,FIFO,逻辑结构上也是一种操作受限的线性表●二、栈和队列的顺序存储结构●栈的顺序存储●●队列的顺序存储●进队:队不满时,送值到队尾元素,再将队尾指针加一●出队:队不空时,取队头元素值,再将队头指针加一●判断队空:Q.front==Q.rear==0;●循环队列(牺牲一个单元来区分队空和队满,尾指针指向队尾元素的后一个位置,也就是即将要插入的位置)●初始:Q.front==Q.rear●队满:(Q.rear+1)%MaxSize=Q.front●出队,队首指针进1:Q.front=(Q.front+1)%MaxSize●入队,队尾指针进1:Q.rear=(Q.rear+1)%MaxSize●队列长度:(Q.rear+MaxSize-Q.front)%MaxSize●三、栈和队列的链式存储结构●栈的链式存储●●队列的链式存储●实际是上一个同时带有头指针和尾指针的单链表,尾指针指向单链表的最后一个结点,与顺序存储不同,通常带有头结点●四、多维数组的存储●行优先:00,01,02,10,11,12●列优先:00,10,01,11,02,12●五、特殊矩阵的压缩存储●对称矩阵●三角矩阵●三对角矩阵(带状矩阵)●稀疏矩阵●将非零元素及其相应的行和列构成一个三元组存储●十字链表法●六、栈、队列、数组的应用●栈在括号匹配中的应用●栈在递归中的应用●函数在递归调用过程中的特点:最后被调用的函数最先执行结束●队列在层次遍历中的应用●二叉树的层次遍历●1跟结点入队●2若队空,则结束遍历,否则重复3操作●3队列中的第一个结点出队并访问,若有左孩子,则左孩子入队;若有右孩子,则右孩子入队●重点为栈的(出入栈过程、出栈序列的合法性)和队列的操作及其特征●小知识点(选择题)●n个不同元素进栈,出栈元素不同排列的个数为{2n\choose n }/(n+1)●共享栈是指让两个顺序栈共享一个存储空间,将两个栈的栈底分别设置在共享空间的两端,两个栈顶向共享空间的中间延伸,可以更有效的利用存储空间,同时对存储效率没有什么影响●双端队列是指允许两端都可以进行入队和出队操作的队列●输出受限的双端队列:允许两端插入,只允许一端删除●输入受限的双端队列:允许两端删除,只允许一端插入三、第四章串●考纲内容●字符串模式匹配●暴力算法●注意指针回退时的操作是i=i-j+2;j=j+1;●kmp算法●手工求next数组时,next[j]=s的最长相等前后缀长度+1,其中s为1到j-1个字符组成的串●在实际kmp算法中,为了使公式更简洁、计算简单,如果串的位序是从1开始的,则next数组需要整体加一;如果串的位序是从0开始的,则next数组不需要加一●根据next数组求解nextval数组:如果p[j]==p[next[j]],则nextval[j]=nextval[next[j]],否则nextval[j]=next[j];●小知识点●串和线性表的区别:1线性表的数据元素可以不同,但串的数据元素一般是字符;2串的操作对象通常是子串而不是某一个字符四、第五章树与二叉树●考纲内容●一、树的基本概念●定义●树是一种递归的数据结构,是一种逻辑结构●树的性质●结点数为n,则边的数量为n-1●树中的结点数等于所有结点的度数之和加1(一个结点的孩子个数称为该结点的度,树中结点的最大度数称为树的度,每一条边表示一个结点,对应一个度,只有根结点上面无边,故结点树=度数之和+1)●度为m的树中第i层至多有m^{i-1}个结点(i\geq1)(m叉树的第i层最多有m^{i-1}个结点)●高度为h的m叉树至多有(m^h-1)/(m-1)个结点(假设每一个结点都有m个孩子,则由等比数列的求和公式可以推导出该式子)●具有n个结点的m叉树的最小高度是\lceil log_m(n(m-1)+1)\rceil(由高度为h的m叉树的最大结点树公式有,n满足式子(m^{h-1}-1)/(m-1) \leq n\leq (m^h-1)/(m-1))●高度为h的m叉树至少有h个结点;高为h,度为m的树至少有h+m-1个结点(m叉树并不等于度为m的树,m叉树可以为空树,要求所有结点的度小于等于m,而度为m的树一定有一个结点的度数为m)●二、二叉树●二叉树的定义及其主要特征●定义●特点●每个结点至多只有两颗子树●二叉树是有序树,其子树有左右之分,次序不能颠倒,否则将成为另一颗二叉树,即使树中结点只有一颗子树,也要区分他是左子树还是右子树●特殊的二叉树●满二叉树:高度为h,结点数为2^h-1,所有叶子结点都集中在二叉树的最下面一层,除叶子结点外的所有结点度数都为2,从根结点为1开始编号,对于编号为i的结点,其父结点为\lfloor i/2 \rfloor,左孩子(若有)编号为2i,右孩子(若有)编号为2i+1,所以编号为偶数的结点只可能是左孩子,编号为奇数的结点只可能是右孩子●完全二叉树:删除了满二叉树中编号更大的结点,高为h,结点数为n的完全二叉树的每个结点的编号都与高度为h的满二叉树中编号为1到n的结点相同。

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

(完整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。

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

:数据结构课程的任务是:讨论数据的各种逻辑结构、在计算机中的存储结构以及各种操作的算法设计。

:数据:是客观描述事物的数字、字符以及所有的能输入到计算机中并能被计算机接收的各种集合的统称。

数据元素:表示一个事物的一组数据称作是一个数据元素,是数据的基本单位。

数据项:是数据元素中有独立含义的、不可分割的最小标识单位。

数据结构概念包含三个方面:数据的逻辑结构、数据的存储结构的数据的操作。

数据的逻辑结构指数据元素之间的逻辑关系,用一个数据元素的集合定义在此集合上的若干关系来表示,数据结构可以分为三种:线性结构、树结构和图。

:数据元素及其关系在计算机中的存储表示称为数据的存储结构,也称为物理结构。

数据的存储结构基本形式有两种:顺序存储结构和链式存储结构。

:算法:一个算法是一个有穷规则的集合,其规则确定一个解决某一特定类型问题的操作序列。

算法规则需满足以下五个特性:输入——算法有零个或多个输入数据。

输出——算法有一个或多个输出数据,与输入数据有某种特定关系。

有穷性——算法必须在执行又穷步之后结束。

确定性——算法的每个步骤必须含义明确,无二义性。

可行性——算法的每步操作必须是基本的,它们的原则上都能够精确地进行,用笔和纸做有穷次就可以完成。

有穷性和可行性是算法最重要的两个特征。

:算法与数据结构:算法建立数据结构之上,对数据结构的操作需用算法来描述。

算法设计依赖数据的逻辑结构,算法实现依赖数据结构的存储结构。

:算法的设计应满足五个目标:正确性:算法应确切的满足应用问题的需求,这是算法设计的基本目标。

健壮性:即使输入数据不合适,算法也能做出适当的处理,不会导致不可控结高时间效率:算法的执行时间越短,时间效率越高。

果。

高空间效率:算法执行时占用的存储空间越少,空间效率越高。

可读性:算法的可读性有利于人们对算法的理解。

:度量算法的时间效率,时间复杂度,(课本39页)。

:递归定义:即用一个概念本身直接或间接地定义它自己。

递归定义有两个条件:至少有一条初始定义是非递归的,如1!=1.由已知函数值逐步递推计算出未知函数值,如用(n-1)!定义n!。

线性表:线性表是由n(n>=0)个类型相同的数据元素a0,a1,a2,…an-1,组成的有限序列,记作:LinearList = (a0,a1,a2,…an-1)其中,元素ai可以是整数、浮点数、字符、也可以是对象。

n是线性表的元素个数,成为线性表长度。

若n=0,则LinearList为空表。

若n>0,则a0没有前驱元素,an-1没有后继元素,ai(0<i<n-1)有且仅有一个直接前驱元素ai-1和一个直接后继元素ai+1。

线性表的顺序存储是用一组连续的内存单元依次存放线性表的数据元素,元素在内存的物理存储次序与它们在线性表中的逻辑次序相同。

线性表的数据元素数据同一种数据类型,设每个元素占用c字节,a0的存储地址为Loc(a0),则ai的存储地址Loc(ai)为:Loc(ai) = Loc(a0)+ i*c数组是顺序存储的随机存储结构,它占用一组连续的存储单元,通过下标识别元素,元素地址是下标的线性函数。

:顺序表的插入和删除操作要移动数据元素。

平均移动次数是属数据表长度的一半。

(课本第50页):线性表的链式存储是用若干地址分散的存储单元存储数据元素,逻辑上相邻的数据元素在物理位置上不一定相邻,必须采用附加信息表示数据元素之间的顺序关系。

它有两个域组成:数据域和地址域。

通常成为节点。

(课本第55页及56页)单链表(课本56页)单链表的遍历:Node<E> p = head; while(p!=null){ 访问p节点;p = ;}单链表的插入和删除操作非常简便,只要改变节点间的链接关系,不需移动数据元素。

单链表的插入操作:1):空表插入/头插入 2)中间插入/尾插入if(head == null) Node<E> q = new Node<E>(x);{ head = new Node<E>(x); = ;}else{ = q;Node<E> q=new Node<E>(x); 中间插入或尾插入都不会改变单表= head; 的头指针head。

head = q;单链表的删除操作:头删除:head = ;中间/尾删除:if!=null){ =循环单链表:如果单链表最后一个节点的next链保存单链表的头指针head值,则该单链表成为环形结构,称为循环单链表。

(课本67)若rear是单链表的尾指针,则执行(=head;)语句,使单链表成为一条循环单链表。

当==head时,循环单链表为空。

:双链表结构:双链表的每个结点有两个链域,分别指向它的前驱和后继结点,当==null时,双链表为空。

设p指向双链表中非两端的某个结点,则成立下列关系:p=。

双链表的插入和删除:1)插入 2)删除q=new DLinkNode(x); = ;=; =p; if=null){= q;=q; .prev = ;}循环双链表:当==head且==head时,循环双链表为空。

第三章:栈和队列栈:栈是一种特殊的线性表,其中插入和删除操作只允许在线性表的一端进行。

允许操作的一端称为栈顶,不允许操作的一端称为栈底。

栈有顺序栈和链式栈。

栈中插入元素的操作称为入栈,删除元素的操作称为出栈。

没有元素的中称为空栈。

栈的进出栈顺序:后进先出,先进后出。

(及75页的思考题)。

:队列:队列是一种特殊的线性表,其中插入和删除操作分别在线性表的两端进行。

向队列中插入元素的过程称为入队,删除元素的过程称为出对,允许入队的一端称为队尾,允许出队的一端称为对头。

没有元素的队列称为空队列。

队列是先进先出。

第四章:串:串是一种特殊的线性表,其特殊性在于线性表中的每个元素是一个字符。

一个串记为:s=“s0s1s2…sn-1” 其中n>=0,s是串名,一对双引号括起来的字符序列s0s1s2…sn-1是串值,si(i=0,1,2,…n-1)为特定字符集合中的一个字符。

一个串中包含的字符个数称为串的长度。

长度为0的串称为空串,记作“”,而由一个或多个空格字符构成的字符串称为空格子串:由串s中任意连续字符组成的一个子序列sub称为s的子串,s称为sub的主串。

子串的序号是指该子串的第一个字符在主串中的序号。

串比较:两个串可比较是否相等,也可比较大小。

两个串(子串)相等的充要条件是两个串(子串)的长度相同,并且各对应位置上的字符也相同。

两个串的大小由对应位置的第一个不同字符的大小决定,字符比较次序是从头开始依次向后。

当两个串长度不等而对应位置的字符都相同时,较长的串定义为较“大”。

第五章:数组和广义表:数组是一种数据结构,数据元素具有相同的数据类型。

一维数组的逻辑结构是线性表,多维数组是线性表的扩展。

:一维数组:一维数组采用顺序存储结构。

一个一维数组占用一组连续的存储单元。

设数组第一个元素a0的存储地址为Loc(a0),每个元素占用c字节,则数组其他元素ai的存储地址Loc(ai)为: Loc(ai)= Loc(a0)+i*c数组通过下标识别元素,元素地址是下标的线性函数。

一个下标能够唯一确定一个元素,所划给的时间是O(1)。

因此数组是随机存取结构,这是数组最大的优点。

:多维数组的遍历:有两种次序:行主序和列主序。

行主序:以行为主序,按行递增访问数组元素,访问完第i行的所有元素之后再访问第i+1行的元素,同一行上按列递增访问数组元素。

a00,a01,…a0(n-1), a10,a11,…a1(n-1),…a(m-1)0,a(m-1)1,…,a(m-1)(n-1)2)列主序:以列为主序,按列递增访问数组元素,访问完第j列的所有元素之后再访问第j+1列的元素,同一列上按列递增访问数组元素。

多维数组的存储结构:多维数组也是由多个一维数组组合而成,组合方式有一下两种。

静态多维数组的顺序存储结构:可按行主序和列主序进行顺序存储。

按行主序存储时,元素aij的地址为:Loc(aij)= Loc(a00)+(i*n+j)*c按列主序存储时,Loc(aij)= Loc(a00)+(j*m+i)*c动态多维数组的存储结构。

二维数组元素地址就是两个下标的线性函数。

无论采用哪种存储结构,多维数组都是基于一维数组的,因此也只能进行赋值、取值两种存取操作,不能进行插入,删除操作。

第六章:树是数据元素(结点)之间具有层次关系的非线性结构。

在树结构中,除根以外的结点只有一个直接前驱结点,可以有零至多个直接后继结点。

根没有前驱结点。

树是由n(n>=0)个结点组成的有限集合(树中元素通常称为结点)。

N=0的树称为空树;n>0大的树T;@有一个特殊的结点称为根结点,它只有后继结点,没有前驱结点。

@除根结点之外的其他结点分为m(m>=0)个互不相交的集合T0,T1,T3……..,Tm-1,其中每个集合Ti(0<=i<m)本身又是一棵树,称为根的子树。

树是递归定义的。

结点是树大的基本单位,若干个结点组成一棵子树,若干棵互不相交的子树组成一棵树。

树的每个结点都是该树中某一棵子树的根。

因此,树是由结点组成的、结点之间具有层次关系大的非线性结构。

结点的前驱结点称为其父母结点,反之,结点大的后继结点称为其孩子结点。

一棵树中,只有根结点没有父母结点,其他结点有且仅有一个父母结点。

拥有同一个父母结点的多个结点之间称为兄弟结点。

结点的祖先是指从根结点到其父母结点所经过大的所有结点。

结点的后代是指该结点的所有孩子结点,以及孩子的孩子等。

结点的度是结点所拥有子树的棵数。

度为0的结点称为叶子结点,又叫终端结点;树中除叶子结点之外的其他结点称为分支结点,又叫非叶子结点或非终端结点。

树的度是指树中各结点度的最大值。

结点的层次属性反应结点处于树中的层次位置。

约定根结点的层次为1,其他结点的层次是其父母结点的层次加1。

显然,兄弟结点的层次相同。

树的高度或深度是树中结点的最大层次树。

设树中x结点是y结点的父母结点,有序对(x,y)称为连接这两个结点的分支,也称为边。

设(X0,X1,….,Xk-1)是由树中结点组成的一个序列,且(Xi,Xi+1)(0<=i<k-1)都是树中的边,则该序列称为从X0到Xk-1的一条路径。

路径长度为路径上的边数。

在树的定义中,结点的子树T0,T1…..,Tm-1之间没有次序,可以交换位置,称为无序树,简称树。

如果结点的子树T0,T1……,Tm-1从左到右是有次序的,不能交换位置,则称该树为有序树。

森林是m(m>=0)棵互不相干的树的集合。

给森林加上一个根结点就变成一棵树,将树的根节点删除就变成森林。

相关文档
最新文档