(学习笔记)数据结构大体回顾

来源:互联网 发布:权力的游戏 夜王 知乎 编辑:程序博客网 时间:2024/05/17 17:43

“ 数据结构是指组成数据的元素之间的结构关系,即数据的组织结构 。”经过这几天的浅显认识,数据结构以数据元素为单位,通过逻辑关系,将这些数据元素按照某种规律或者要求组织起来,方便查询使用。数据元素可以是基本数据类型int 、char、float单个类型,也可以是struct结构类型。

1、线性表。a、线性表的顺序存储叫做顺序表,存储方式为按照逻辑顺序依次存放在一组地址连续的存储单元,前提要求是存储单元大小大于等于顺序表长度。然后根据顺序表的特性对工作目标进行初始化、插入、删除操作等等。

      b、线性表的链式存储称为链表,链表有单链表,循环链表和双向链表。因为随机存储,所以每个节点结构中包含指向下一个结点的指针。涉及到链表的基本运算有初始化链表、创建链表、查找结点、插入结点、删除结点等等。其中最基本的单链表,创建方法有头插法和尾插法两种方式。头插法将新的接头放到第一个(头结点head指向的结点),链表中结点顺序与输入顺序是相反的;尾差法增加一个指向表尾的尾指针r,将新节点插入到表尾上。单链表是后两个的基础。链表的两个应用:约瑟夫问题和一元多项式的表示及相加。

2、串(字符串),是一种特殊的线性表。定义为-串(string)是由0或多个字符组成的有限序列。“因为串是一种线性表,因此串的逻辑结构和线性表极为相似,区别仅在于串的数据结构对象被限定为字符集。基本运算有生成新串、求串的长度、串复制、串比较、串连接、求子串、返回子串位置、插入和删除串等等。”实现方法有定长顺序串、堆串和块链串。在串中有串模式匹配问题,在主串s中查找子串t,其简化方法涉及到KMP算法。

3、栈和队列。栈(stark)和队列(queue)都是特殊的线性表,是操作受限的线性结构。

a、栈是限定仅在表的一边进行插入或删除的线性表,通常进行插入或删除操作的一端称为栈顶(top),另一端称为栈底(bottom)。栈的操作遵循后进先出(Last-In First-Out)的原则。栈的操作要求:为当栈中无元素时,不能进行出栈操作(pop),否则称为栈“下溢”;当栈满时,不能进行入栈操作(push),否则称为栈“下溢”。栈有顺序栈和链栈两种。顺序栈是利用一片连续的存储空间来存储栈中的数据元素,可以用一个一维数组来表示,将数组起始一端设置为栈底,栈顶指针top=-1,数组的大小必须事先给定,采用链式存储则不需要。

b、队列是限定在表的一端删除元素而在表的另一端插入元素的线性表。队列中只允许删除元素的一端称为队首(front),只允许插入元素的一端称为队尾(rear)。

队列遵循先进先出(First-In First-Out)的原则,添加元素称为入队,删除元素称为出队。同样有顺序存储方法和链式存储方法,称为顺序队列和链队列。顺序队列中有个循环队列克服普通顺序队列存在的假溢出问题,要解决的是队满和队空的判断问题,一般采用浪费一个存储空间,使队尾指针rear永远追不上队头指针front。

4、数组和广义表。

a、数组是由n(n>=1个)相同类型的数据元素所构成的有限序列,而且这些元素被存储在一块连续的空间。关键的是数组元素的地址计算。矩阵的压缩存储指对有规律的元素和值相同的元素只分配一个存储空间,对零元素不分配存储空间。有特殊矩阵和稀疏矩阵,特殊矩阵中包括对称矩阵、三角矩阵和对角矩阵。稀疏矩阵是指矩阵中大多数元素为0。假设m行n列的矩阵含有t个非0元素,则称δ=t/(m*n)为稀疏因子,通常认为δ<=0.05的矩阵为稀疏矩阵。稀疏矩阵通常使用三元组表的压缩存储方式,并采用三元组表实现矩阵的转置运算。

b、广义表又称列表。当广义表LS非空时,称第一个元素a1位LS的表头,而其余部分所组成的表称为LS的表尾。通常用链式存储结构来表示。有两种结点,分别是用以表示广义表的表结点和用以表示原点元素的原子节点。相关算法有求广义表的深度和广度。

5、树的基本概念。树中关键的为二叉树。定义为二叉树是由n(n>=0)个结点的有限集合构成的,此集合或者为空集,或者由一个根节点及两棵互不相交的左右子树所组成,并且左右子树都是二叉树。二叉树的存储结构通常采用顺序存储方式和链式存储方式。顺序存储是指用一组连续的存储单元按照完全二叉树的结点的编号顺序存放结点内容,但是在顺序存储结构中,深度为k的二叉树,需要长度为(2的k次方-1)的一维数组。

遍历二叉树指按某种顺序访问二叉树中的各个结点一次且仅一次的过程。若限定遍历的顺序为先左后右,有前序遍历,中序遍历和后序遍历。遍历算法的应用于查询二叉树中的某个结点、两种序列构造二叉树、求树的深度。

将二叉树的各个结点中的空的左孩子指针域改为指向其前驱,将空的右孩子指针域改为指向其后继,这种新的指针称为线索,得到的二叉树称为线索二叉树。

然后是树和二叉树的转换。

哈夫曼树是二叉树的应用之一,也称为最优二叉树——带权路径长度WPL最小的二叉树。哈夫曼树的应用:前缀编码问题和最优判定树问题。

6、图。图是由定点的有穷非空集合和顶点之间的边的集合所组成的。分为无向图和有向图,无向图中的边为无向边,有向图中的边为有向边。

图的存储结构用的最多的是邻接矩阵和邻接表这两种形式。

图的遍历通常有两种有深度优先搜索(Depth-First Search)和广度优先搜索(Breadth-First Search)。深度优先遍历算法以递归技术为支持,而广度优先算法则以队列技术为支持。

无向图的连通性中的难点是利用算法求解最小生成树。

有向图的两个最短路径的问题:a.求一个结点到其他结点的最短路径;b.求任意两个结点间的最短路径。

有向无环图(不存在回路的有向图)中的拓扑排序和求解关键路径算法。

7、查找。三个参量:a.查找对象;b.查找范围;c.查找对象在查找范围L中所处的位置。

基于线性表的查找法:a.顺序查找法;b.折半查找法;c.分块查找法。在顺序查找法中设置下标为0的为监视哨,存放要查找的关键字。

基于树的查找法:a.二叉排序树;b.平衡二叉排序树;c.B树。平衡二叉树是一棵空的二叉排序树或者是a.根节点的左子树和右子树的高度至多相差1;b.根节点的左子树和右子树也都是平衡二叉树的二叉树排序树。基本操作有查找结点和删除结点。

散列技术,在结点的关键字k和结点的存储位置p之间建立对应关系H,使得p=H(k),在查找时,根据对应关系找到位置。采用散列技术将记录存储在一块连续的存储空间中,这块连续的存储空间称为散列表(哈希表)。函数H称为散列函数,得到的存储位置p称为散列地址。着重介绍了除留余数法、处理冲突方法为先行探测在散列方式。线性探测再散列、二次探测再散列、伪随机探测再散列、链地址法是4种常用的处理冲突的方法。

8、内部排序。a.选择排序:每一趟从待排序的n-i+1(i=1,2,3......n-1)条记录中选出关键字最小的记录作为有序序列的第i条记录。有简单选择排序、堆排序、基于并行的锦标赛排序;

  b.插入排序:在一个已经排好序的记录子集的基础上,每一步都将下一个待排序的记录有序插入已经排好序的记录子集的合适位置上,直到将所有待排序记录全部插入为止。分为直接插入排序、折半插入排序、希尔排序。

  c.交换排序:基于简单的交换思想实现的冒泡排序法以及在此基础上进行改进的快速排序法。

9、文件。


完全根据魏振刚的《数据结构》。

纯粹个人写着玩。。。。

0 0
原创粉丝点击