2022年数据结构知识点全面总结—精华版 .docx
《2022年数据结构知识点全面总结—精华版 .docx》由会员分享,可在线阅读,更多相关《2022年数据结构知识点全面总结—精华版 .docx(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精品_精品资料_第 1章绪论内容提要: 数据结构争论的内容.针对非数值运算的程序设计问题,争论运算机的操作对象 以及它们之间的 关系和操作 .数据结构涵盖的内容: 基本概念:数据、数据元素、数据对象、数据结构、数据类型、抽象数据类型.数据 全部能被运算机识别、储备和处理的符号的集合.数据元素 是数据的基本单位,具有完整确定的实际意义.数据对象 具有相同性质的数据元素的集合,是数据的一个子集.数据结构 是相互之间存在一种或多种特定关系的数据元素的集合,表示为:Data_Structure= (D, R )数据类型 是一个值的集合和定义在该值上的一组操作的总称.抽象数据类型 由用户定义的一个数学模
2、型与定义在该模型上的一组操作,它由基本的数据类型构成. 算法的定义及五个特点.算法是对特定问题求解步骤的一种描述,它是指令的有限序列,是一系列输入转换为输出的运算步骤.算法的基本特性 :输入、输出、有穷性、确定性、可行性 算法设计要求.正确性、可读性、健壮性、效率与低储备量需求 算法分析.时间复杂度、空间复杂度、稳固性学习重点: 数据结构的“三要素” : 规律结构 、 物理(储备)结构及在 这种结构上所定义的操作(运算). 用运算语句频度来估算算法的时间复杂度.其次章线性表内容提要: 线性表的规律结构定义,对线性表定义的操作.线性表的定义:用数据元素的有限序列表示可编辑资料 - - - 欢迎下
3、载精品_精品资料_ 线性表的储备结构:次序储备结构和链式储备结构.次序储备定义:把规律上相邻 的数据元素储备在物理上相邻 的储备单元中的储备结构.链式储备结构 : 其结点在储备器中的位置是随便的,即规律上相邻的数据元素在物理上 不肯定 相邻.通过 指针 来实现; 线性表的操作在两种储备结构中的实现.数据结构的基本运算:修改、插入、删除、查找、排序1) 修改通过数组的下标便可拜访某个特定元素并修改之.核心语句 :Vi=x;次序表修改操作的时间效率是O12) 插入在线性表的第i 个位置前插入一个元素实现步骤:将第 n 至第 i 位的元素向后移动一个位置.将要插入的元素写到第i 个位置.表长加 1.
4、留意:事先应判定: 插入位置 i是否合法 .表是否已满 .应当符合条件:1 i n+1或i=1, n+1核心语句:for j=n; j=i; j-aj+1=a j ; a i =x;n+;插入时的平均移动次数为:nn+1/2 ( n+1) n/2 On3) 删除删除线性表的第i 个位置上的元素实现步骤:将第 i+1至第 n 位的元素向前移动一个位置.表长减 1.留意:事先需要判定,删除位置i 是否合法 .应当符合条件: 1 i n或i=1, n核心语句:for j=i+1; j=n; j+ aj-1=aj; n-;次序表删除一元素的时间效率为:T( n=n-1/2 On次序表插入、删除算法的平
5、均空间复杂度为O1单链表:( 1)可编辑资料 - - - 欢迎下载精品_精品资料_用单链表结构来存放26 个英文字母组成的线性表(a, b, c, z) ,请写出 C 语言程序.#include #include typedef struct node char data;struct node *next;node;node *p,*q,*head;/一般需要 3 个指针变量int n ;/ 数据元素的个数int m=sizeofnode;/* 结构类型定义好之后,每个node 类型的长度就固定了,m 求一次即可 */void build / 字母链表的生成.要一个个渐渐链入int i;he
6、ad=node*mallocm;/m=sizeofnode p=head;/因尾结点要特殊处理,故i 26/ 第一个结点值为字符a前面已求出for i=1; idata=i+ a -1;p-next=node*mallocm; p=p-next . p-data=i+ a -1;p-next=NULL ;void display/为后继结点“挖坑” ;/ 让指针变量P 指向后一个结点/ 最终一个元素要单独处理/ 单链表尾结点的指针域要置空;/字母链表的输出p=head;while p/当指针不空时循环(仅限于无头结点的情形)printf%c,p-data;p=p-next;/让指针不断“顺藤摸
7、瓜”( 2)单链表的修改 或读取)思路:要修改第 i 个数据元素,必需从头指针起始终找到该结点的指针p,然后才能: pdata=new_value读取第 i 个数据元素的核心语句是:Linklist *findLinklist *head ,int iint j=1;可编辑资料 - - - 欢迎下载精品_精品资料_Linklist *p; P=head-next;Whilep.=NULL&jnext; j+;return p;链表插入的核心语句:Step 1: s-next=p-next; Step 2: p-next=s .6.单链表的删除删除动作的核心语句(要借助帮助指针变量q):q =
8、p-next;p-next=q-next; freeq ./ 第一储存 b 的指针,靠它才能找到c./ 将 a、c 两结点相连,剔除b 结点./ 完全释放 b 结点空间7.双向链表的插入操作:设 p 已指向第 i 元素,请在第i 元素前插入元素x: ai-1 的后继从 ai 指针是 p变为 x(指针是 s :s-next = p;p-prior-next = s ; ai的前驱从 ai-1 指针是 p-prior 变为 x 指针是 s;s-prior = p -prior ; p-prior = s ; 8.双向链表的删除操作:3. 单链表的插入设 p 指向第i 个元素,删除第i 个 元素后继
9、方向: ai-1 的后继由 ai 指针 p变为 ai+1指针 p -next ;p -prior-next =p-next;前驱方向: ai+1 的前驱由 ai 指针 p变为 ai-1 指针 p - prior ;p-next-prior = p -prior ;可编辑资料 - - - 欢迎下载精品_精品资料_ 数组的规律结构定义及储备数组: 由一组名字相同、下标不同的变量构成N 维数组的特点: n 个下标,每个元素受到n 个关系约束一个 n 维数组可以看成是由如干个 n 1 维数组 组成的线性表.储备:事先商定按某种次序将数组元素排成一列序列,然后将这个线性序列存入储备器中.在二维数组中,我
10、们既可以规定按行储备,也可以规定按列储备.设一般的二维数组是Ac1.d1, c2.d2 ,就行优先储备时的的址公式为: 二维数组列优先储备的通式为: 稀疏矩阵(含特殊矩阵)的储备及运算.稀疏矩阵:矩阵中非零元素的个数较少(一般小于5%)学习重点: 线性表的规律结构,指线性表的数据元素间存在着线性关系 .在次序储备结构中,元素储备的先后位置 反映出这种线性关系,而在链式储备结构中,是靠指针 来反映这种关系的. 次序储备结构用一维数组表示,给定下标,可以存取相应元素,属于随机存取 的储备结构. 链表操作中应留意不要使链意外“断开”.因此,如在某结点前插入一个元素,或删除某元素,必需知道该元素的 前
11、驱结点的指针 . 把握通过画出结点图来进行链表(单链表、循环链表等)的生成、插入、删除、遍历等操作. 数组(主要是二维)在以行序 /列序 为主的储备中的的址运算方法. 稀疏矩阵的三元组表储备结构. 稀疏矩阵的十字链表储备方法.补充重点:1. 每个储备结点都包含两部分:数据域和指针域 链域 2. 在单链表中,除了首元结点外,任一结点的储备位置由其直接前驱结点的链域的值指示.3. 在链表中设置头结点有什么好处?头结点即在链表的首元结点之前附设的一个结点,该结点的数据域可以为空,也可存放表长度等附加信息, 其作用是为了对链表进行操作时,可以对空表、非空表 的情形以及对 首元结点 进行统一处理,编程更
12、便利.4. 如何表示空表?( 1)无头结点时,当头指针的值为空时表示空表.( 2)有头结点时,当头结点的指针域为空时表示空表.5. 链表的数据元素有两个域,不再是简洁数据类型,编程时该如何表示?因每个结点至少有两个重量,且数据类型通常不一样,所以要采纳结构数据类型.6. sizeofx运算变量 x 的长度(字节数) . mallocm 开创 m 字节长度的的址空间,并返回这段空间的首的址. freep 释放指针 p 所指变量的储备空间,即完全删除一个变量.可编辑资料 - - - 欢迎下载精品_精品资料_7. 链表的运算效率分析:( 1)查找因线性链表只能次序存取,即在查找时要从头指针找起,查找
13、的时间复杂度为On .( 2) 插入和删除因线性链表不需要移动元素,只要修改指针,一般情形下时间复杂度为O1 .但是,假如要在单链表中进行前插或删除操作,由于要从头查找前驱结点,所耗时间复杂度将是On .例:在 n 个结点的单链表中要删除已知结点*P ,需找到它的 前驱结点的的址 ,其时间复杂度为O ( n)8. 次序储备和链式储备的区分和优缺点?次序储备时, 规律上相邻的数据元素,其物理存放的址也相邻. 次序储备的优点是储备密度大,储备空间利用率高.缺点是插入或删除元素时不便利.链式储备时,相邻数据元素可随便存放,但所占储备空间分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针.
14、链式储备的优点是插入或删除元素时很便利,使用敏捷.缺点是储备密度小,储备空间利用率低. 次序表相宜于做查找这样的静态操作. 链表宜于做插入、删除这样的动态操作. 如线性表的长度变化不大,且其主要操作是查找,就采纳次序表. 如线性表的长度变化较大,且其主要操作是插入、删除操作,就采纳链表.9. 判定:“数组的处理比其它复杂的结构要简洁”,对吗? 答:对的.由于 数组中各元素具有统一的类型. 数组元素的下标一般具有固定的上界和下界 ,即数组一旦被定义,它的维数和维界就不再转变.数组的 基本操作比较简 单,除了结构的初始化和销毁之外,只有存取元素和修改元素值的操作.10. 三元素组表中的每个结点对应
15、于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的行下标、列下标 和 元素值 .11. 写出右图所示稀疏矩阵的压缩储备形式.解:介绍 3 种储备形式.法 1:用线性表表示:( 1,2,12, 1,3,9, 3,1,-3 , 3,5,14,4,3,24, 5,2,18 , 6,1,15, 6,4,-7 )法 2:用十字链表表示用途:便利稀疏矩阵的加减运算方法:每个非 0 元素占用 5 个域法 3:用三元组矩阵表示:稀疏矩阵压缩储备的缺点:将失去随机存取功能代码:1. 用数组 V 来存放 26 个英文字母组成的线性表(a,b,c, z),写出在次序结构上生成和显示该表的C 语言程序.c
16、har V30;void build/ 字母线性表的生成,即建表操作可编辑资料 - - - 欢迎下载精品_精品资料_int i;V0=a;for i=1;i=n-1;i+ Vi=Vi-1+1;void display / 字母线性表的显示,即读表操作int i;for i=0;iM上溢 else stop+=e;次序栈出栈函数 POP status Pop iftop=L 下溢 else e=s-top;returne;可编辑资料 - - - 欢迎下载精品_精品资料_ 队列的定义及操作,队列的删除在一端(队尾),而插入就在队列的另一端(队头).因此在两种储备结构中,都需要队头和队尾两个指针.队
17、列:只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表.链队列 结点类型定义:typedef Struct QNode QElemTypedata;/元素StructQNode*next;/指向下一结点的指针Qnode , * QueuePtr ;链队列类型定义:typedefstruct QueuePtrfront ; / 队首指针QueuePtrrear ; / 队尾指针LinkQueue;链队示意图:空链队的特点: front=rear链队会满吗?一般不会,由于删除时有free 动作.除非内存不足;入队(尾部插入) : rear-next=S; rear=S;出队(头部删除)
18、: front-next=p-next;2. 次序队 次序队类型定义:#defineQUEUE-MAXSIZE100/最大队列长度typedefstruct QElemType*base;/ 队列的基址intfront;/ 队首指针intrear;/ 队尾指针SqQueue可编辑资料 - - - 欢迎下载精品_精品资料_建队核心语句:q . base=QElemType *mallocsizeof QElemType)* QUEUE_MAXSIZE;/安排空间次序队示意图:循环队列:队空条件 :front = rear初始化时: front = rear 队满条件:front = rear+1
19、 % NN=maxsize 队列长度(即数据元素个数) : L= (N rear front ) % N1)初始化一个空队列StatusInitQueue SqQueue&q / 初始化空循环队列qq . base=QElemType *mallocsizeofQElemType)* QUEUE_MAXSIZE;/ 安排空间if .q.baseexitOVERFLOW;/内存安排失败,退出程序q.front =q.rear=0; / 置空队列return OK; /InitQueue;2)入队操作StatusEnQueueSqQueue&q,QElemType e/ 向循环队列 q 的队尾加入
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年数据结构知识点全面总结精华版 2022 数据结构 知识点 全面 总结 精华版
限制150内