自考02142数据结构导论密训高频考点重点汇总.doc
《自考02142数据结构导论密训高频考点重点汇总.doc》由会员分享,可在线阅读,更多相关《自考02142数据结构导论密训高频考点重点汇总.doc(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第一章 概论知识点名称内容引言2 算法+数据结构=程序 自考押题 vx 344647 公众号/小程序 顺通考试资料1.数据结构指一组相互之间存在一种或多种特定关系的数据的组织方式和它们在计算机内的存储方 式, 以及定义在该组数据上的一组操作。数据 、数据元素和数据项1.数据: 所有被计算机存储 、处理的对象。2.数据元素: 数据的基本单位, 是运算的基本单位 。常常又简称为元素。3.数据项是数据的不可分割的最小标识单位。在数据库中数据项又称为字段或域。4.从宏观上看, 数据 、数据元素和数据项实际上反映了数据组织的三个层次, 数据可由若干个数据元 素组成, 而数据元素又可由若干个数据项组成。5
2、.数据结构是相互之间存在一种或多种特定关系的数据元素的集合 。它包括数据的逻辑结构 、数据的 存储结构和数据的基本运算。数据的逻辑 结构1.数据的逻辑结构: 与数据元素本身的形式 、 内容 、相对位置 、个数无关 。2.集合: 任意两个结点之间都没有邻接关系, 组织形式松散。3.线性结构: 结点按逻辑关系依次排列形成一条 “链”, 结点之间一个一个依次相邻接。4.树形结构: 具有分支、层次特性, 其形态像自然界中的树, 上层的结点可以和下层多个结点相邻接, 但下层结点只能和上层的一个结点相邻接。5 图结构: 最复杂, 其中任何两个结点都可以相邻接。数据的存储 结构1.数据的逻辑结构在计算机中的
3、实现称为数据的存储结构。2.顺序存储方式: 指所有存储结点存放在一个连续的存储区里。利用结点在存储器中的相对位置来表 示数据元素之间的逻辑关系。3.链式存储方式: 指每个存储结点除了含有一个数据元素外, 还包含指针, 每个指针指向一个与本结 点有逻辑关系的结点, 用指针表示数据元素之间的逻辑关系。4.除了上述两种存储方式之外, 还有索引存储方式和散列存储方式。但主要的存储方式是: 顺序存储 方式和链式存储方式。运算1.运算是指在某种逻辑结构上施加的操作, 即对逻辑结构的加工。2.运算包括: 建立 、查找 、读取 、插入和删除等 。 3.线性表 、栈和队列中的元素具有相同的逻辑结构(即线性结构)
4、, 但有不同的运算集, 它们是不同 的数据结构。算法分析1.正确性: 能正确地实现预定的功能, 满足具体问题的需要。2.易读性: 易于阅读 、理解和交流, 便于调试 、修改和扩充。3.健壮性: 即使输入非法数据, 算法也能适当地做出反应或进行处理, 不会产生预料不到的运行结果。4.时空性: 指该算法的时间性能(或时间效率) 和空间性能(或空间效率) , 前者是算法包含的计算 量, 后者是算法需要的存储量。时间复杂度1.常见的时间复杂度的比较:O(1)O(log2n)O(n)O(n2)O(n3)O(n4)next 。某带有头结点的单链表的头指针为 head, 判断该单链表为非空的条件是 head
5、-next!=NULL 。线性表的基本运算在单链表上的实现1.初始化(1)假设单链表的类型定义如下: typedef struct node DataType data;2/15struct node *next;node , *LinkList;算法 InitiateLinkList()实现单链表的初始化:LinkList InitiateLinkList( ) /建立一个空的单链表 LinkList head; /头指针head=malloc(sizeof(node); /动态构建一个结点, 并定义为头结点head-next=NULL;return head;/空表由一个头指针 head
6、和一个头结点组成。head 指向新创建的结点, 即头结点。一个空单链表仅有一个头结点, 它的指针域为 NULL。(2)在带头结点的单链表 L 中, 第一个数据元素结点的指针为 L-next。( 3)设有一个单链表, 若结点的指针域为 next, 则指针 p所指的结点为最后一个结点的条件是 p-next=NULL 。工作指针 p-next 为 NULL 时, 说明已经走到了表的尾部, 这时已完成对所有 结点的访问。2.插入 p 指向的新结点的操作(1)设 r 指向单链表的最后一个结点, 要在最一个结点之后插入 s 所指的结点, 需执行的语句序列是 r-next=s;r=s;r-next=NULL
7、。( 2 ) 将 一 个 由 指 针 q 指 向 的 结 点 插 在 单 链 表 中由 指 针 p 所 指 向 的 结 点 之 后 的 操 作 是: q-next=p-next;p-next=q;。3.删除*p 结点的操作在一个单链表中, 已知指针 q 指向指针 p 所指结点的前驱结点, 则删除*p 结点的操作语句是 q-next=p-next。循环链表1.在单链表中, 如果让最后一个结点的指针域指向第一个结点可以构成循环链表。(1)只有头指针 head1)判断 P 所指结点为尾结点的条件: p-next=head2)判断指针 P 所指结点为首结点的条件: p=rear-next-next3)
8、判断链表是否为空的条件: head-next=head3/15(2)有头指针 head 和尾指针 rear说明: rear-next 指向头结点 head。在 带 有 头 结 点 的 循 环 链 表 中, 尾 指 针 为 rear, 判 断 指 针 P 所 指 结 点 为 首 结 点 的 条 件 是 p=rear-next-next。(3)只有尾指针 rear1)删除表首结点的操作可表示为:p=rear-next-next;rear-next-next=p-next;free(p);2)已知尾指针的单向循环链表中,在第一个结点后面插入一个新结点,该算法的时间复杂度为 O(1)。双向循环链 表1
9、.每个结点有两个指针, next 指针指向直接后继结点; prior 指针指向直接前驱结点。2.带头结点的双向循环链表 L 为空的条件: (L-next=L)&(L-prior=L)。3.删除(1)设 p 指向待删结点, 删除*p 的操作:p-prior-next=p-next;/语句p-next-prior=p-prior;/语句free(p);(2)这两个语句的执行顺序可以颠倒。4.插入在 p 所指结点的后面插入一个新结点*t 的操作:t-prior=p;t-next=p-next;4/15p-next-prior=t;p-next=t;顺序实现与链接实现的比较顺序表时间复杂度单链表时间复
10、杂度按位置查找运算O(1)O(n)定位运算O(n)O(n)插入 、删除运算O(n)O(n)第三章 栈 、队列和数组知识点名称内容栈 、队列和 数组1.栈和队列可看作是特殊的线性表 。它们是运算受限的线性表 。栈和队列也同样有两种存储结构(顺序存储结构和链式存储结构)。2.栈和队列可看作是特殊的线性表。(1)函数的嵌套调用和程序递归的处理都是用栈来实现的。(2)操作系统中进程调度 、网络管理中的打印服务等都是用队列来实现的。栈的基本概 念1.栈: 这种线性表上的插入和删除运算限定在表的某一端进行 。允许进行插入和删除的一端称为栈顶, 另一端称为栈底。不含任何数据元素的栈称为空栈 。2.栈的修改原
11、则: 后进先出, 栈又称为后进先出线性表, 简称后进先出表。3.栈的基本运算:(1)初始化 InitStack(S): 构造一个空栈 S;(2)判栈空 EmptyStack(S): 若栈 S 为空栈, 则结果为 1, 否则结果为 0;(3)进栈 Push(S, x): 将元素 x 插入栈 S 中, 使 x 成为栈 S 的栈顶元素;(4)出栈 Pop(S): 删除栈顶元素;(5)取栈顶 GetTop(S): 返回栈顶元素。栈的顺序实 现1.当空栈, 栈顶下标值 top=0, 如果此时做出栈运算, 则产生 “下溢” 。当栈中的数据元素已经填满 了, 如果再进行进桟操作, 会发生 “上溢” 。2.初
12、始化Int InitStack(SeqStk *stk)stk-top=0;return 1;3.判栈空Int EmptyStack(SeqStk *stk)/若栈为空, 则返回值 1, 否则返回值 0if(stk-top=0)return 1;else return 0;5/154.进栈Int Push(SeqStk *stk, DataType x)/若栈未满, 元素 x 进栈 stk 中, 否则提示出错信息if(stk-top=maxsize-1)/判断找是否满 error( “栈已满”);return 0;else stk-top+; stk-datastk-top=x;/栈未满, t
13、op 值加 1/元素 x 进桟return 1;5.出栈Int PopSeqStk *stk) if(EmptyStack(stk) /判断是否下溢(栈空) error( “下溢”);return 0;else stk-top-;/未下溢, 栈顶元素出栈/top 值减 1return 1;也可以理解为: 原栈顶的下一个结点成为新的栈顶, 即 top=top-next;6.取栈顶元素DataType GetTop(SeqStk*stk)/取栈顶数据元素, 栈顶数据元素逋过参数返回if(EmptyStack(stk) )return NULLData; /栈空, 返回 NULLDataelsere
14、turn stk-datastk-top; /返回栈顶数据元素栈的链接实 现1.栈的链接实现称为链栈,链栈可以用带头结点的单链表来实现 。LS 指向链表的头结点, 首结点是栈 顶结点, LS-next 指向栈顶结点, 尾结点为栈底结点。2.出栈操作始终是栈顶结点出栈, 即删除头结点之后的结点, 如下图:6/15原栈顶的下一个结点成为新的栈顶, 即top=top-next; 3.链栈由于采用了链表的方式作为存储方式, 各结点通过链域的连接组成栈, 由于每个结点空间都是 动态分配产生, 链栈不用预先考虑容量的大小。4.入栈时, 使用 malloc 申请空间后, 用指针相连接, 所以节点个数没有限制
15、; 但是出栈时, 如果栈中 的元素个数为 0, 则不能继续出栈, 所以需要判断当前栈是否为空 。综上, 链表不需要判满, 只需要 判定是否为空即可。5.链栈 LS 中, Ls 一next 指向栈顶结点, 则新结点 * P 入栈的操作为: P 一next=LS 一next; 和 LS-next=p; 。递归与栈1.将递归形式描述的算法改写为功能等价的非递归形式描述的算法, 通常应设置的输助结构是栈。队列的基本 概念1.队列是一种先进先出的线性表, 新加入的数据元素插在队列尾端, 出队列的数据元素在队列首部被 删除。队列的顺序 实现1.循环队列: 为了避免元素的移动, 将存储队列元素的一维数组首尾
16、相接, 形成一个环状 。2.入队列操作语句: SQ.rear=(SQ.rear+1)%maxsize;SQ.dataSQ.rear=x;3.出队列赋值语句: SQ.fronts(SQ.front+1)%maxsize;4.循环队列满: ( (CQ.rear+1)%maxsize=CQ.front)成立。5.队列空条件: (CQ.rear=CQ.front)成立。6.数组 Qn表示一个循环队列, 设 f 为队列中第一个元素的位置, r 为队列中实际队尾的位置加 1, 则 队列中元素个数的公式: (r-f+n)%n队列的链接 实现1. 由于链接实现需要动态申请空间, 故链队列在一定范围内不会出现队
17、列满的情况。2.当(LQ.front=LQ.rear)成立时, 队列中无数据元素, 此时队列为空 。带头结点的链队列中, 队 列头和队列尾指针分别为 front 和 rear, 则判断队列空的条件为front=rear 。 3.在实现队列的链表结构中, 仅设置尾指针的单循环链表的时间复杂度最优 。数组的存储 结构1.数组元素的存储位置是下标的线性函数: 对于二维数组 amn, 如果每个元素占 k 个存储单元, 以行为主序为例, 讨论数组元素 aij位置与下标的关系。2. 由于下标从 0 开始, 元素 aij之前已经有 i 行元素, 每行有 n 个元素, 在第 i 行, 有 j+1 个元素 ,
18、总共有 n*i+j+1 个元素,第一个元素与 aij相差 n*i+j+11 个位置,故 aij的位置为:loci,j=loc0, 0+(n*i+j)*k。矩阵的压缩 存储1.为了节省存储空间, 对这类矩阵采用多个值相同的元素只分配一个存储空间, 零元素不存储的策略, 这一方法称为矩阵的压缩存储。2.特殊矩阵7/15(1)对称矩阵 。一个 n 阶方阵 A 中的元素满足下述条件: aij=aji0i, jn-1 。假设以一维数组 Mn (n+1)/2作为 n 阶对称矩阵A 的存储结构。(2)三角矩阵 。以主对角线为界的上(下) 半部分是一个固定的值 c 或零。1)为存储 n 阶的三角矩阵, 采用数
19、组 Mn(n+1)/2, 把矩阵中上(下) 三角部分的 n(n+1)/2 个 元素存储在数组 M0 Mn(n+1)/2-1的 n(n+1)/2 个单元中, 其中 c 若非 0, 则存放到数组的Mn(n+1)/2中。2)上三角矩阵中元素 aij在数组 M 中的位置对应关系:3.稀疏矩阵: 非零元素个数很少的矩阵 。矩阵压缩存储主要是为了节省存储空间 。三元组表示法: 用三个项来表示稀疏矩阵中的非零元素 aij, 即(i, j, aij), 其中 i 表示行序号, j 表示 列序号, aij是非零元素的值, 通常称为三元组。第四章 树和二叉树知识点名称内容树的概念1.树是 n(n 多 0)个结点的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自考 02142 数据结构 导论 高频 考点 重点 汇总
限制150内