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
原创粉丝点击