![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
ZM_iTUDOU
爱高跟,也爱跑鞋,喝茶也喝酒。
展开
-
数据结构(二)基本概念
1. 基本概念和术语数据:描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。数据元素:是组成数据,有一定意义的基本单位,在计算机中通常作为整体处理,也被称为记录。数据项:一个数据元素可以由若干个数据项组成。 数据项是数据不可分割的最小单位。数据对象:是性质相同的数据元素的集合,是数据的子集数据结构:是相互之间存在原创 2016-10-11 00:16:26 · 344 阅读 · 0 评论 -
数据结构(十六)线索二叉树
一、线索二叉树的原理 通过考察各种二叉链表,不管儿叉树的形态如何,空链域的个数总是多过非空链域的个数。准确的说,n各结点的二叉链表共有2n个链域,非空链域为n-1个,但其中的空链域却有n+1个。如下图所示。 因此,提出了一种方法,利用原来的空链域存放指针,指向树中其他结点。这种指针称为线索。 记ptr指向二叉链表中的一个结点,以下是建立线索的规转载 2016-11-10 00:18:06 · 316 阅读 · 0 评论 -
数据结构(十九)图的存储结构
图的存储结构1. 邻接矩阵用两个数组表示图,一个一位数组存储图中顶点信息,一个二维数组(邻接矩阵)存储图中边或弧的信息无向图有向图有向网图(带权值)2. 邻接表 (边数相对顶点较少的图,用邻接矩阵浪费存储空间 联想:顺序存储结构因预先分配内存造成空间浪费,引出链式存储)邻接表:数组与链表相结合的存储方法无向原创 2016-11-16 00:46:46 · 323 阅读 · 0 评论 -
数据结构(十七)赫夫曼树 树总结回顾
赫夫曼树定义与原理路径长度:从树中一个结点到另一个结点之间的分支构成两个节点之间的路径,路径上的分支数目树的路径长度:从树根到每一结点的路径长度之和赫夫曼树:带权路径长度WPL最小的二叉树 赫夫曼编码目的:解决远距离通信的数据传输的最优化问题随着字符的增加和多字符权重的不同,压缩会更加显出优势 若要设计长短不等的编码,则必须是任意字符的编码都不是另一个字符的编码原创 2016-11-13 18:08:08 · 568 阅读 · 0 评论 -
数据结构(十八)图的定义
图的定义图:由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。 图中数据元素,称为顶点图中,任意两个顶点之间都有可能有关系,顶点之间的逻辑关系用边来表示。 无向边用()表示 无向完全边 有n * (n - 1) / 2条边有向边用 简单图:同一条边不重复出现 图的顶点与原创 2016-11-14 16:39:40 · 325 阅读 · 0 评论 -
数据结构(二十)图的遍历
图的遍历定义:从图中某一顶点出发访遍图中其余顶点,且使每一个顶点仅被访问一次的过程 遍历方法深度优先遍历(深度优先搜索):从图中某个顶点v出发,访问此顶点,然后从v的未被访问的邻接点出发深度优先遍历图,直至图中所有和v有路径相同的顶点都被访问到。若图中尚有顶点未被访问到,则另选图中一个未曾被访问的顶点做起始点,重复上述过程,直至图中所有顶点都被访问到为止。类似树的前序遍历原创 2016-11-18 12:09:54 · 941 阅读 · 0 评论 -
数据结构(一)
1. 算法 + 数据结构 = 程序问题(problem):从输入到输出的一种映射函数数据结构(Data Structure):逻辑数据结构在计算机中的存储表达,支持相应的操作算法(algorithhm):对特定问题求解过程的描述方法程序(program):算法在计算机程序设计语言中的实现 2.层次逻辑结构:(1).线性表、栈和队列原创 2016-10-08 22:26:58 · 350 阅读 · 0 评论 -
排序大综合
排序大综合//排序 大综合 测试 我记住了没!!#include <iostream>#include <stdlib.h>#include <string.h>using namespace std;void BubbleSort(int a[], int n){ if(NULL == a || n == 0) { return ; } fo原创 2017-08-01 10:27:39 · 364 阅读 · 0 评论 -
平衡二叉树的实现
//平衡二叉树 #include <iostream>#include <stdio.h>#include <stdlib.h>using namespace std;typedef int ElementType; typedef struct BinaryNode{ ElementType data; int height; unsigned int freq;原创 2017-07-23 21:04:24 · 415 阅读 · 0 评论 -
根据前序 中序 后序 构建二叉树
//Construct Binary Tree from Inorder and Postorder #include <iostream>#include <vector>using namespace std;struct TreeNode{ int val; TreeNode *left, *right; TreeNode(int data): val(data),原创 2017-08-08 09:47:28 · 444 阅读 · 0 评论 -
判断二叉树是否为二叉搜索树
判断一个二叉树是否为二叉搜索树刚开始我想的很简单,觉得只要递归判断左孩子是否小于根节点 右孩子是否大于根节点就行了 //二叉搜索树 = 左孩子 < 根结点 && 右孩子 > 根节点 //下面的写法 错的!!!!错的!!! //二叉树的判断应该是左子树的最大值 小于 根节点 右子树的最小值大于根节点 bool isValidBST(TreeNode *原创 2017-08-09 12:43:26 · 626 阅读 · 0 评论 -
二叉树的最大深度和最小深度实现
二叉树的最大深度给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的距离。 如果二叉树为空,则深度为0 如果不为空,分别求左子树的深度和右子树的深度,取最大的再加1.二叉树的最小深度给定一个二叉树,找出其最小深度。 二叉树的最小深度为根节点到最近叶子节点的距离。 判断左子树或右子树是否为空,若左子树为空,则返回右子树的深度,反之返回左子树的深度,如果都不为空,则返回原创 2017-08-04 12:11:07 · 616 阅读 · 0 评论 -
数据结构(十一)顺序栈及链栈
栈应用:很多软件,比如word photoshop等文档或图像编辑软件中,都有撤销(undo)的操作,就是用栈的 栈(stack)是限定仅在表尾进行插入和删除操作的线性表。栈顶:允许插入和删除的一端;另一端称为栈底栈的结构:后进先出,LIFO结构 栈的插入操作:进栈,也称压栈,入栈栈的删除操作:出栈,弹栈 栈的顺序存储结构及实现栈的顺序存储结构栈是线性表原创 2016-10-19 10:04:33 · 686 阅读 · 0 评论 -
数据结构(十)循环链表和双向链表
循环链表将单链表中终端节点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称循环链表 循环链表和单链表主要差异:循环的判断条件上,单链表是判断p->next是否为空,循环是判断p->next不等于头结点 若想要用O(1)的时间由链表指针访问到最后一个结点,则不用头指针,而是用指向终端结点的尾指针来表示循环链表举例,原创 2016-10-18 12:32:13 · 311 阅读 · 0 评论 -
数据结构(九)
静态链表用数组描述的链表叫做静态链表该数据下标都对应一个data(存放数据元素)和一个cur(存放该元素的后继在数组中的下标) //线性表的静态链表存储结构#define MAXSIZE 1000 //假设链表的最大长度为1000typedef struct{ElemTypedata;Int cur;}Comment,StaticLinkList[Maxsize];原创 2016-10-17 21:26:53 · 262 阅读 · 0 评论 -
数据结构(三)算法
第2章算法第2章算法算法:解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作 算法的特性:输入输出:算法具有零个或多个输入 有穷性:算法在执行优先的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。 确定性:算法的每一个步骤都具有确定的含义,不会出现二义性。原创 2016-10-12 00:14:57 · 319 阅读 · 0 评论 -
(数据结构)栈和堆区别
一、预备知识——程序的内存分配1、一个由C/C++编译的程序占用的内存分为以下几个部分(一)栈区(stack) 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。(二)堆区(heap) 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。(三)全局区(静转载 2016-10-22 00:06:01 · 590 阅读 · 0 评论 -
数据结构(十二)栈和队列
数据结构栈的作用一.递归递归:直接调用自己或通过一系列的调用语句间接地调用自己每个递归定义必须至少有一个条件,满足递归不再进行,即不在引用自身而是返回退出 迭代与递归迭代:循环递归:选择迭代:不需要反复调用函数和占用额外的内存递归:使程序结构清晰监理函数副本,耗费时间和内存 例斐波那契数列的递归函数递归与栈递归过程退回的顺序是他前行顺序的逆序。在原创 2016-11-03 00:03:56 · 322 阅读 · 0 评论 -
数据结构(十三)串 KMP算法模式匹配
数据结构串串由零个或多个字符组成的有限序列 串的模式匹配——子串的定位操作1. 朴素模式匹配 (低效)对主串的每一个字符作为子串开头,与要匹配的字符串进行匹配。对主串做大循环,每个字符开头做T的长度的小循环,知道匹配成功或全部遍历为止。2. KMP模式匹配算法 核心思想:利用已经得到的部分匹配信息来进行后面的匹配过程。以下是转载的有关KMP转载 2016-11-03 16:57:38 · 503 阅读 · 0 评论 -
数据结构(十四) 树
数据结构树一.树的定义树:n个结点的有限集。任意一个非空树中:1.有且仅有一个特定的称为根(root)的结点 2.当n>1,其余结点可分为m个互不相交的有限集T1,T2…..其余每一个集合本身又是一颗树,称为根的子树。 注意:根结点唯一子树个数无限制,不相交。 二.结点的分类度:节点拥有的子树数内部结点(除根节点):叶节原创 2016-11-04 17:11:18 · 368 阅读 · 0 评论 -
数据结构(四)算法的时间复杂度
在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n) =O(f(n))。它表示随时间规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度,其中f(n) 是问题规模的某个函数。 随着n的增大,T(n)增长最慢的算原创 2016-10-12 18:09:35 · 680 阅读 · 0 评论 -
数据结构(五)算法总结
最坏情况与平均情况最坏情况时间是一种保证,那就是运行时间不会再坏了。在应用中,这是一种最重要的需求,通常,除非特别指定,我们提到的运行时间都是最坏情况的运行时间。 平均运行时间是所有情况中最有意义的,因为他是期望的运行时间。 一般在没有特殊说明的情况下,都是指最坏时间复杂度。 算法空间复杂度算法的空间复杂度通过计算算法所需的存储空间实现,算法空间复杂度的计算公式记作原创 2016-10-13 23:21:17 · 303 阅读 · 1 评论 -
数据结构(六)线性表(一)
线性表 线性表的定义:零个或多个数据元素的有限序列若线性表记为(a1,……ai-1,ai,……,an),则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素。当i = 1,2,3,……n-1时,ai有且仅有一个直接后继,当i = 2,3,……n,ai有且仅有一个直接前驱。 在较复杂的线性表中,一个数据元素可以由若干个数据项组原创 2016-10-14 12:58:54 · 360 阅读 · 0 评论 -
数据结构(七)线性表(二)
Status GetElem(SqList L, int i, ElemType *e){ if(L.length == 0 || i L.length) { return ERROR; } *e = L.data[i - 1]; return OK;}//操作结果:在L中第i个位置之前插入新的数据元素e,L原创 2016-10-15 19:37:13 · 217 阅读 · 0 评论 -
数据结构(八)线性表链式存储结构
线性表的链式存储结构线性表的链式存储结构的特点:用一组任意的存储单元存储线性表的数据元素,这组数据元素可以是连续的,也可以是不连续的。存储数元素信息的域称为数据域,把存储直接位置的域称为指针域。指针域中存储的信息称作指针或链。这两个部分信息组成数据元素ai的存储映像,称为结点。(结点由存放数据元素的数据域存放后继结点地址的指针域组成) 头指针和头结点的异同头指针:l 头指原创 2016-10-16 20:22:14 · 383 阅读 · 0 评论 -
数据结构(十五)二叉树
二叉树的定义二叉树:n个结点的有限集合,该集合或者为空集,,或者有一个根结点和两棵互不相交的,分别成为根结点和两棵互不相交的,分别称为根结点的左子树和右子树的二叉树组成. 二叉树特点:每个结点最多有两颗子树。左右子树有顺序,次序不能颠倒。即使树中某结点只有一颗子树,也要区分它是左子树还是右子树。 特殊二叉树1. 斜树 左斜树:所有结点都只有左子树原创 2016-11-07 17:14:52 · 376 阅读 · 0 评论 -
图的实现 邻接矩阵+无向图
#include <iostream>#include <string.h>#include <vector>#include <stdlib.h>using namespace std;class Node{public: Node(char data = 0);//构造函数 初始化 char m_Data; //值 bool m_blsVisited; /原创 2017-07-27 15:16:06 · 514 阅读 · 0 评论