知识大全 数据结构各章要点
Posted 结点
篇首语:千磨万击还坚劲,任尔东西南北风。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构各章要点相关的知识,希望对你有一定的参考价值。
第一章 概 论************************************************************************数据就是指能够被计算机识别 存储和加工处理的信息的载体 数据元素是数据的基本单位 可以由若干个数据项组成 数据项是具有独立含义的最小标识单位 ************************************************************************数据结构的定义 ·逻辑结构 从逻辑结构上描述数据 独立于计算机 ·线性结构 一对一关系 ·线性结构 多对多关系 ·存储结构 是逻辑结构用计算机语言的实现 ·顺序存储结构 如数组 ·链式存储结构 如链表 ·索引存储结构 ·稠密索引 每个结点都有索引项 ·稀疏索引 每组结点都有索引项 ·散列存储结构 如散列表 ·数据运算 ·对数据的操作 定义在逻辑结构上 每种逻辑结构都有一个运算集合 ·常用的有 检索 插入 删除 更新 排序 ************************************************************************数据类型 是一个值的集合以及在这些值上定义的一组操作的总称 ·原子类型 由语言提供 ·结构类型 由用户借助于描述机制定义 是导出类型 抽象数据类型ADT ·是抽象数据的组织和与之的操作 相当于在概念层上描述问题 ·优点是将数据和操作封装在一起实现了信息隐藏 ************************************************************************程序设计的实质是对实际问题选择一种好的数据结构 设计一个好的算法 算法取决于数据结构 ************************************************************************算法是一个良定义的计算过程 以一个或多个值输入 并以一个或多个值输出 评价算法的好坏的因素 ·算法是正确的 ·执行算法的时间 ·执行算法的存储空间(主要是辅助存储空间) ·算法易于理解 编码 调试 ************************************************************************时间复杂度 是某个算法的时间耗费 它是该算法所求解问题规模n的函数 渐近时间复杂度 是指当问题规模趋向无穷大时 该算法时间复杂度的数量级 评价一个算法的时间性能时 主要标准就是算法的渐近时间复杂度 算法中语句的频度不仅与问题规模有关 还与输入实例中各元素的取值相关 时间复杂度按数量级递增排列依次为 常数阶O( ) 对数阶O(log n) 线性阶O(n) 线性对数阶O(nlog n) 平方阶O(n^ ) 立方阶O(n^ ) ……k次方阶O(n^k) 指数阶O( ^n) 空间复杂度 是某个算法的空间耗费 它是该算法所求解问题规模n的函数 算法的时间复杂度和空间复杂度合称算法复杂度
第二章 线性表************************************************************************线性表是由n≥ 个数据元素组成的有限序列 n= 是空表 非空表 只能有一个开始结点 有且只能有一个终端结点 ************************************************************************线性表上定义的基本运算 ·构造空表 Initlist(L)·求表长 Listlength(L)·取结点 GetNode(L i)·查找 LocateNode(L x)·插入 InsertList(L x i)·删除 Delete(L i)************************************************************************顺序表是按线性表的逻辑结构次序依次存放在一组地址连续的存储单元中 在存储单元中的各元素的物理位置和逻辑结构中各结点相邻关
系是一致的 地址计算 LOCa(i)=LOCa( )+(i )*d (首地址为 )在顺序表中实现的基本运算 ·插入 平均移动结点次数为n/ 平均时间复杂度均为O(n) ·删除 平均移动结点次数为(n )/ 平均时间复杂度均为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 ) s >next=p >next p >next=s 平均时间复杂度均为O(n)·删除运算 p=GetNode(L i ) r=p >next p >next=r >next free(r) 平均时间复杂度均为O(n)************************************************************************单循环链表是一种首尾相接的单链表 终端结点的指针域指向开始结点或头结点 链表终止条件是以指针等于头指针或尾指针 采用单循环链表在实用中多采用尾指针表示单循环链表 优点是查找头指针和尾指针的时间都是O( ) 不用遍历整个链表 ************************************************************************双链表就是双向链表 就是在单链表的每个结点里再增加一个指向其直接前趋的指针域prior 形成两条不同方向的链 由头指针head惟一
确定 双链表也可以头尾相链接构成双(向)循环链表 双链表上的插入和删除时间复杂度均为O ( ) ************************************************************************顺序表和链表的比较 ·基于空间 ·顺序表的存储空间是静态分配 存储密度为 适于线性表事先确定其大小时采用 ·链表的存储空间是动态分配 存储密度< 适于线性表长度变化大时采用 ·基于时间 ·顺序表是随机存储结构 当线性表的操作主要是查找时 宜采用 ·以插入和删除操作为主的线性表宜采用链表做存储结构 ·若插入和删除主要发生在表的首尾两端 则宜采用尾指针表示的单循环链表
第三章 栈和队列************************************************************************栈(Stack)是仅限制在表的一端进行插入和删除运算的线性表 称插入 删除这一端为栈顶 另一端称为栈底 表中无元素时为空栈 栈
的修改是按后进先出的原则进行的 我们又称栈为LIFO表(Last In First Out) 通常栈有顺序栈和链栈两种存储结构 ************************************************************************栈的基本运算有六种 ·构造空栈 InitStack(S)·判栈空: StackEmpty(S)·判栈满 StackFull(S)·进栈 Push(S x)·退栈 Pop(S)·取栈顶元素 StackTop(S) ************************************************************************在顺序栈中有 上溢 和 下溢 的现象 · 上溢 是栈顶指针指出栈的外面是出错状态 · 下溢 可以表示栈为空栈 因此用来作为控制转移的条件 顺序栈中的基本操作有六种 ·构造空栈·判栈空·判栈满·进栈·退栈·取栈顶元素
************************************************************************链栈则没有上溢的限制 因此进栈不要判栈满 链栈不需要在头部附加头结点 只要有链表的头指针就可以了 链栈中的基本操作有五种 ·构造空栈·判栈空·进栈·退栈·取栈顶元素************************************************************************队列(Queue)是一种运算受限的线性表 插入在表的一端进行 而删除在表的另一端进行 允许删除的一端称为队头(front) 允许插入的
一端称为队尾(rear) 队列的操作原则是先进先出的 又称作FIFO表(First In First Out) 队列也有顺序存储和链式存储两种存储结
相关参考
第十章文件 文件是性质相同的记录的集合记录是文件中存取的基本单位数据项是文件可使用的最小单位数据项有时称字段或者属性 文件 ·逻辑结构是一种线性结构 ·操作有检索和维护并有实时和批量处理
单链表运算 ·建立单链表 ·头插法s>next=head;head=s;生成的顺序与输入顺序相反平均时间复杂度均为O(n) ·尾插法head=rear=null;if(head=nul
第二章线性表 线性表是由n≥个数据元素组成的有限序列n=是空表;非空表只能有一个开始结点有且只能有一个终端结点 线性表上定义的基本运算 ·构造空表Initlist(L) ·求表长Listl
顺序表和链表的比较 ·基于空间 ·顺序表的存储空间是静态分配存储密度为适于线性表事先确定其大小时采用 ·链表的存储空间是动态分配存储密度<适于线性表长度变化大时采用 ·基于时间 ·
抽象数据类型ADT ·是抽象数据的组织和与之的操作相当于在概念层上描述问题 ·优点是将数据和操作封装在一起实现了信息隐藏 程序设计的实质是对实际问题选择一种好的数据结构设计一个好的算法算法取
冒泡排序 ·自下向上确定最轻的一个 ·自上向下确定最重的一个 ·自下向上确定最轻的一个后自上向下确定最重的一个 ·冒泡排序是就地的稳定排序时间复杂度为O(n^)比较次数为n(n)/;移动次
归并排序 ·先两个一组排序形成(n+)/组再将两组并一组直到剩下一组为止 ·归并排序是非就地稳定排序时间复杂度是O(nlogn) 分配排序 箱排序 ·按关键字的取值范围确定箱子数按关键字
经过排序后这些具有相同关键字的记录之间的相对次序保持不变则称这种排序方法是稳定的否则排序算法是不稳定的 排序过程中不涉及数据的内外存交换则称之为内部排序(内排序)反之若存在数据的内外存交换则称之
构造最小生成树的算法 ·Prim算法的时间复杂度为O(n^)与边数无关适于稠密图 ·Kruskal算法的时间复杂度为O(lge)主要取决于边数较适合于稀疏图 最短路径的算法 ·Dijkst
顺序文件的插入删除和修改只能通过复制整个文件实现 索引文件的组织方式通常是在主文件之外建立一张索引表指明逻辑记录和物理记录之间一一对应的关系它和主文件一起构成索引文件 索引非顺序文件中的索引表