数据结构与算法
文章平均质量分 77
此专栏分享的主要内容包括线性表、树、图和广义表、算法设计策略以及查找与排序算法等,并提供个人见解,方面大家交流与学习
陆讯
南大软院计算机科学与技术,同济大学工商管理MBA,一个懂技术的产品人,从事互联网产品事业,励志做有价值、有温度的产品...
展开
-
数据结构 - 哈希函数
哈希查找之前的查找算法,时间复杂度为O(n),或者O(㏒2n),其效率取决于“比较”的次数。 即使对于采取排序树结构的查找表,由于每一次比较的结果,如果关键字与数据元素不相等,则有“大于”或者“小于”两个结果,所以下一步会有两种可能的方向,因此O(㏒2n)已经是最优了。哈希表(Hash Table)采取另一种算法,其查找的时间复杂度最快可以达到O(1),即只要给出关键字,立刻就可以查找到该元素原创 2015-05-03 09:55:21 · 3869 阅读 · 0 评论 -
数据结构 - 动态查找
动态查找当查找表以顺序存储结构存储且需要保持有序时,若对查找表进行插入、删除或排序操作,就必须移动大量的记录,当记录数很多时,这种移动的代价很大。 若查找表无序,则插入删除可无需移动大量记录,但于查找不利。 利用树的形式组织查找表,可以对查找表进行动态高效的查找。二叉排序树二叉排序树(Binary Sort Tree或Binary Search Tree) 的定义为:二叉排序树或者是空树,或者是原创 2015-05-03 09:48:19 · 5189 阅读 · 0 评论 -
数据结构 - 静态查找
查找主要讨论顺序表、有序表、索引表和哈希表查找的各种实现方法,以及相应查找方法在等概率情况下的平均查找长度。 查找表(Search Table):相同类型的数据元素(对象)组成的集合,每个元素通常由若干数据项构成。 关键字(Key,码):数据元素中某个(或几个)数据项的值,它可以标识一个数据元素。若关键字能唯一标识一个数据元素,则关键字称为主关键字(Primary Key) ;将能标识若干个数原创 2015-05-03 09:31:47 · 3155 阅读 · 0 评论 -
数据结构 - 拓扑排序
应用背景学生选修课程问题 顶点——表示课程 有向弧——表示先决条件,若课程i是课程j的先决条件,则图中有弧(i,j) 学生应按怎样的顺序学习这些课程,才能无矛盾、顺利地完成学业——拓扑排序 拓扑序列是有向无环图中各顶点构成的有序序列。该序列满足如下条件:如果图中一顶点vi到另一顶点vj存在一条路径,那么vj在此图的拓扑排序序列中位于vi之后。有向无环图(DAG)和 AOV网有向无环图原创 2015-05-03 09:23:01 · 2738 阅读 · 0 评论 -
数据结构 - 图的遍历
图的遍历图的遍历(Traversing Graph):从图的某一顶点出发,访遍图中的其余顶点,且每个顶点仅被访问一次。 图的遍历算法是各种图的操作的基础。但图的遍历存在以下特点: ◆ 复杂性:图的任意顶点可能和其余的顶点相邻接,可能在访问了某个顶点后,沿某条路径搜索后又回到原顶点,而有些顶点却还没有被遍历到的情况。 ◆ 解决办法:在遍历过程中记下已被访问过的顶点。设置一个辅助向量V原创 2015-05-01 07:31:26 · 3699 阅读 · 0 评论 -
数据结构 - 图的存储结构
图的抽象数据类型定义图是一种数据结构,加上一组基本操作就构成了图的抽象数据类型。图的抽象数据类型定义如下:ADT Graph{数据对象V:具有相同特性的数据元素的集合,称为顶点集。数据关系R:R={VR}VR={<v,w>|<v,w>| v,wV∧p(v,w) ,<v,w>表示 从v到w的弧,P(v,w)定义了弧<v原创 2015-05-01 07:21:34 · 2793 阅读 · 0 评论 -
数据结构 - 图的基本术语
图(Graph)概念 图(Graph)是一种比线性表和树更为复杂的数据结构。 线性结构:研究数据元素之间的一对一关系。除第一个和最后一个元素外,任何一个元素都有唯一的一个直接前驱和直接后继。 树结构:是研究数据元素之间的一对多的关系。每个元素对下(层)可以有0个或多个元素相联系,对上(层)只有唯一的一个元素相关,数据元素之间有明显的层次关系。图结构:研究数据元素之间的多对多的关系。在这原创 2015-05-01 07:01:16 · 2306 阅读 · 0 评论 -
数据结构 - 赫夫曼树及其应用
赫夫曼树及其应用 赫夫曼(Huffman)树又称最优树,是一类带权路径长度最短的树,有着广泛的应用。1 基本概念 ① 结点路径:从树中一个结点到另一个结点的之间的分支构成这两个结点之间的路径。 ② 路径长度:结点路径上的分支数目称为路径长度。 ③ 树的路径长度:从树根到每一个结点的路径长度之和。 ④ 结点的带权路径长度:从树的根结点到该结点的的路径长度与结点的权(值)的乘积。 权(原创 2015-04-30 10:08:53 · 1798 阅读 · 0 评论 -
数据结构 - 树和森林表示与遍历
双亲表示法(顺序存储结构) 用一组连续的存储空间来存储树的结点,同时在每个结点中附加一个指示器(整数域) ,用以指示双亲结点的位置(下标值) 。数组元素及数组的类型定义如下:#define MAX_SIZE 100typedef struct PTNode{ ElemType data ;int parent ;}PTNode ;typedef struct{ P原创 2015-04-30 10:03:27 · 4767 阅读 · 2 评论 -
数据结构 - 线索二叉树
线索树 遍历二叉树是按一定的规则将树中的结点排列成一个线性序列,即是对非线性结构的线性化操作。如何找到遍历过程中动态得到的每个结点的直接前驱和直接后继(第一个和最后一个除外)?如何保存这些信息?问:一棵有n个结点的二叉树,有多少个空闲指针域未用? 若一棵二叉树有n个结点,则有n-1条指针连线 , 而n个结点共有2n个指针域(Lchild和Rchild) ,所以有n+1个空闲指针域未用。可以原创 2015-04-30 09:48:43 · 1776 阅读 · 0 评论 -
数据结构 - 二叉树的遍历
中序遍历二叉树1 递归算法 算法的递归定义是: 若二叉树为空,则遍历结束;否则 ⑴ 中序遍历左子树(递归调用本算法); ⑵ 访问根结点; ⑶ 中序遍历右子树(递归调用本算法)。中序遍历的递归算法void InorderTraverse(BTNode *T){ if (T==NULL) return; InorderTraverse(T->原创 2015-04-30 09:39:34 · 1624 阅读 · 0 评论 -
数据结构 - 二叉树的存储结构
顺序存储结构二叉树存储结构的类型定义:#define MAX_SIZE 100 typedef telemtype sqbitree[MAX_SIZE];用一组地址连续的存储单元依次“自上而下、自左至右”存储完全二叉树的数据元素。 对于完全二叉树上编号为i的结点元素存储在一维数组的下标值为i-1的分量中,如图6-6(c)所示。 对于一般的二叉树,将其每个结点与完全二叉树上的结原创 2015-04-30 09:32:13 · 3986 阅读 · 2 评论 -
数据结构 -树和二叉树
树的主要内容 树型结构:非线性结构,以分支关系定义的层次结构。 主要内容: 树和二叉树的概念、性质 二叉树的存储 二叉树的遍历 线索二叉树 树与二叉树的转化 Huffman树(最优树)树的定义树(Tree)是n(n≧0)个结点的有限集合T,若n=0时称为空树,否则: ⑴ 有且原创 2015-04-30 09:23:10 · 1276 阅读 · 0 评论 -
数据结构 - 数组、矩阵、广义表存储
数组的定义数组的定义 数组是下标index 和值value 组成的序对的集合。 在数组中,每个有定义的下标都与一个值对应,这个值称做数组元素。 每个序对形如: (index,value)数组的顺序表示和实现由于计算机的内存结构是一维的,因此用一维内存来表示多维数组,就必须按某种次序将数组元素排成一列序列,然后将这个线性序列存放在存储器中。 一般都是采用顺序存储的方法来表示数组一维数组的原创 2015-04-29 10:14:32 · 4980 阅读 · 0 评论 -
数据结构 - 串的存储表示和实现
串的基本概念字符串:应用在非数值处理、事务处理等领域。 计算机的硬件:主要是反映数值计算的要求。 字符串的处理比具体数值处理复杂。 串(字符串):是零个或多个字符组成的有限序列。记作: S=“a1a2a3…”,其中S是串名,ai(1≦i≦n)是 单个字符,可以是字母、数字或其它字符。串值:双引号括起来的字符序列,引号不属于串的内容。串长:串中所包含的原创 2015-04-29 10:04:00 · 4546 阅读 · 0 评论 -
数据结构 - 队列的链式实现
队列的链式实现1 队列的链式存储表示 队列的链式存储结构简称为链队列,它是限制在表头进行删除操作和表尾进行插入操作的单链表。 需要两类不同的结点:数据元素结点,队列的队首指针和队尾指针的结点 指针结点类型定义:typedef struct link_queue{ QNode *front , *rear ;}LinkQueue ;2 链队运算及指针变原创 2015-04-29 09:56:35 · 1555 阅读 · 0 评论 -
数据结构 - 队列静态顺序存储结构
队列的基本概念1 队列的基本概念 队列(Queue):也是运算受限的线性表。是一种先进先出(First In First Out ,简称FIFO)的线性表。只允许在表的一端进行插入,而在另一端进行删除。 队首(front) :允许进行删除的一端称为队首。 队尾(rear) :允许进行插入的一端称为队尾。 例如:排队购物。操作系统中的作业排队。先进入队列的成员总是先原创 2015-04-29 09:53:42 · 2127 阅读 · 0 评论 -
数据结构 - 栈的链式存储
栈的链式存储1 栈的链式表示 栈的链式存储结构称为链栈,是运算受限的单链表。其插入和删除操作只能在表头位置上进行。因此,链栈没有必要像单链表那样附加头结点,栈顶指针top就是链表的头指针。图3-4是栈的链式存储表示形式。链栈的结点类型说明如下:typedef struct Snode{ ElemType data ;struct Snode *next ;} SNo原创 2015-04-29 09:10:10 · 2424 阅读 · 0 评论 -
数据结构 - 栈动静态顺序存储
栈1 栈的概念 栈(Stack):是限制在表的一端进行插入和删除操作的线性表。又称为后进先出LIFO (Last In First Out)或先进后出FILO (First In Last Out)线性表。 栈顶(Top):允许进行插入、删除操作的一端,又称为表尾。用栈顶指针(top)来指示栈顶元素。 栈底(Bottom):是固定端,又称为表头。 空栈:当表中没有元原创 2015-04-29 09:04:23 · 2376 阅读 · 0 评论 -
数据结构 - 双向列表与循环列表
循环链表 循环链表(Circular Linked List):是一种头尾相接的链表。其特点是最后一个结点的指针域指向链表的头结点,整个链表的指针域链接成一个环。 从循环链表的任意一个结点出发都可以找到链表中的其它结点,使得表处理更加方便灵活。循环链表的操作 对于单循环链表,除链表的合并外,其它的操作和单线性链表基本上一致,仅仅需要在单线性链表操作算法基础上作以下简单修改:原创 2015-04-28 17:23:31 · 3577 阅读 · 0 评论 -
数据结构 - 线性表链式存储结构
链式存储链式存储 :用一组任意的存储单元存储线性表中的数据元素。用这种方法存储的线性表简称线性链表。存储链表中结点的一组任意的存储单元可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。链表中结点的逻辑顺序和物理顺序不一定相同。(即不要求逻辑上相邻的元素在物理位置上也相邻)为了正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其直接后继结点的地址(或位置),称为指针原创 2015-04-28 17:17:21 · 6468 阅读 · 0 评论 -
数据结构 - 线性表顺序存储结构
线性表 线性表是一种典型的线性结构。其基本特点是线性表中的数据元素是有序且是有限的。在这种结构中:① 存在一个唯一的被称为“第一个”的数据元素; ② 存在一个唯一的被称为“最后一个”的数据元素; ③ 除第一个元素外,每个元素均有唯一一个直接前驱; ④ 除最后一个元素外,每个元素均有唯一一个直接后继。 线性表(Linear List) :是由n(n≧0)个数据元素(结点)a1,a2, …a原创 2015-04-28 17:07:39 · 2406 阅读 · 0 评论 -
数据结构 - 逻辑结构和存储结构
程序=算法+数据结构N.沃思(Niklaus Wirth)教授提出: 程序=算法+数据结构 以上公式说明了如下两个问题: (1)算法决定如何构造和组织数据(算法→数据结构)。 (2)算法的选择依赖于作为基础的数据结构(数据结构→算法)。 软件=程序+文档(软件工程的观点)求解非数值计算的问题主要考虑的是设计出合适的数据结构及相应的算法。 即:首先要考虑对相关的各种信息如何表示原创 2015-04-28 16:55:25 · 17584 阅读 · 4 评论