PART IV 程序设计层 Chapter 9 抽象数据类型和算法
来源:互联网 发布:mep500编程器驱动程序 编辑:程序博客网 时间:2024/06/06 08:36
Chapter 9 抽象数据类型和算法
9.1 抽象数据类型
抽象数据类型(ADT,abstract data type): 属性(数据和操作)明确地与实现分离的数据类型数据结构(data structure): 一种抽象数据类型中的复合数据域的实现容器(containers): 存放和操作其他对象的对象
9.2 实现
伪代码表达式: Add item 、Remove item : 转换器 -- 它们将改变容器的状态 Get next item : 迭代器 -- 用它可以一次访问一个的方式访问所有的元素 More items : 观察者 -- 询问是否访问过所有的项目实现具有两种形式: A. 基于数组的实现(array-based implementation): 用数组来存储项目的容器实现方法 B. 基于链式的实现(linked implementation): 把项目与下一个项目的位置存放在一起的容器实现方法 链式列表也叫做无限制列表,因为节点是在运行时创建的。对节点数的唯一限制是内存的大小。
9.3 列表
列表的特征: 列表中的项目是同构的、线性的,列表是变长的 列表的基本操作 · 自我创建 · 插入项目 · 删除项目 · 自我输出 · 知道存放的项目个数 *一般数据类型(generic data type): 规定了操作,但是没有规定要处理的对象的类型(或类)的数据类型
9.4 排序
A. 选择排序 B. 冒泡排序 *C. 快速排序 其基本策略是分治法,这种策略的基础是递归。 Quicksort: If(there is more than one item in list[first]...list[last]) Select splitaVal Split the list so that list[first]...list[splitPoint-1] <= splitVal list[splitPoint] = splitVal list[splitPoint+1]...list[last] >= splitVal Quicksort the left half Quicksort the right half Split: Set left to first+1 Set right to last Do Increment left until list[left] > splitVal OR left > right Decrement right until list[right] < splitVal OR left > right If(left < right) Swap splitPoint to right While(left <= right) Set splitPoint to right Swap list[first] and list[right]
9.5 二分检索法
二分检索(binary search): 在有序列表中检索项目的操作,通过比较操作排除大部分检索范围Boolean Binary Search(first,last): If(first > last) return false Else Set middle to (first+last)/2 Set result to item.compareTo(list[middle]) If(result is equal to 0) return true Else If(result < 0) Binary Search(first,middle-1) Else Binary Search(middle+1,last )
9.6 栈和队列
栈是抽象数据类型的一种,只能从一端访问栈中元素,可以在第一个位置插入元素,也可以删除第一个元素。它是LIFO(last in first out),插入操作 Push(压入) , 删除操作 Pop(弹出)队列也是抽象数据类型,它只能从一端入,从另一端出。它是FIFO(first in first out),插入操作澡队列的rear(尾部)进行,删除操作在队列的front(头部)进行
9.7 树
A. 二叉树 二叉树是一种容器对象,其中每个阶段可以有两个后继节点,叫做子女。树的头部为起始节点,称为根。 如果一个节点没有子女,那么这个节点叫做树叶 二叉树(binary tree): 具有唯一起始节点(根节点)的容器对象,其中每个节点可以有两个子女节点 根节点和每个节点之间有且只有一条路径 叶节点(leaf node): 没有子女的树节点 *高度为N的二叉树中 最大节点数为 2^(N+1) - 1 *N个节点的二叉树最多可以有N层,最少为 log2(N)+1 层B. 二叉检索树 二叉检索树具有二叉树的形状属性,此外还具有语义属性: 即任何节点的值都要大于它左子树中所以节点值 并且要小于它的右子树的所有节点的值C. 图 图(graph): 由一组节点和一组把节点连接起来的边构成的数据结构 顶点(vertex): 图中的节点 边/弧(edge/arc): 表示图中两个节点的连接的顶点对 无向图(undirected graph): 表示图中两个节点的连接的顶点对 有向图(directed graph(digraph)): 其中的边是从一个顶点指向另一个顶点(或同一个顶点)的图
9.8 程序设计库
大多数现代程序设计语言为程序员提供了类库和编好的算法。 这些库程序大部分是封装了抽象数据类型的类。
0 0
- PART IV 程序设计层 Chapter 9 抽象数据类型和算法
- PART IV 程序设计层 Chapter 6 问题求解和算法设计
- PART IV 程序设计层 Chapter 7 低级程序设计语言
- PART IV 程序设计层 Chapter 8 高级程序设计语言
- PART III 硬件层 Chapter 4 门和电路
- PART VII 通信层 Chapter 15 网络
- PART VII 通信层 Chapter 16 万维网
- PART V 操作系统层 Chapter 10 操作系统
- PART V 操作系统层 Chapter 11 文件系统
- PART VI 应用程序层 Chapter 13 人工智能
- PART VI 应用程序层 Chapter 12 信息系统
- PART II 信息层 Chapter 2 二进制数值和记数系统
- PART VI 应用程序层 Chapter 14 模拟、图形学和其他应用程序
- Chapter 22. Spring邮件抽象层
- accelerated cpp chapter 11 定义抽象数据类型
- 数据类型和抽象数据类型
- 数据类型和抽象数据类型
- 数据类型和抽象数据类型
- Codeforces Round #341 (Div. 2)E(矩阵快速幂优化dp,好题)
- 判断身份证号码是否正确
- 10.按钮
- android 巧用finish方法
- winform程序三个窗体间同步数据(六):利用多播委托同步数据
- PART IV 程序设计层 Chapter 9 抽象数据类型和算法
- 《OpenCV》Part10 OpenCV3.1.0 openCV读取摄像头并保存为.avi视频
- 读书笔记3-《crazy java》
- DialogFragment使用,提示窗口
- Unity之在UI界面上显示3D模型
- 好久不见 HELLOWORLD
- 嵌入式Linux学习:u-boot源码分析(6)--AM335X系列的2014.10版
- 带动效的环形进度图
- c#内存分配