
数据结构
rv0p111
之前由于一些原因博客没有更新,现在还是正常更新,继续分享..
展开
-
二叉搜索树的应用
先给你第一个序列比如说是3,1,4,2,这四个数按照顺序建立一个二叉搜索树,然后再给你n个序列,问你这n个序列如果有序列能建立起来的二叉搜索树是和第一个序列一样的那就输出YES,否则就是NO,比如说3,1,4,2建立起来的搜索树是而3,2,4,1则是这就要输出NO。#include#include#include#includeusing namespace std;typedef st原创 2017-01-01 22:55:51 · 492 阅读 · 0 评论 -
线性表的基本概念
线性表:其实就是零个或多个数据元素的有限序列线性表当中元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素都有且只有一个前驱和后继,其结构如下所示我们把线性表元素的个数n(n>=0)定义为线性表的长度,当n=0的时候就称为空表 在复杂的线性表当中会有很多个数据元素,一个数据元素可以由若干个数据项组成关于线性表的抽象数据...原创 2018-07-02 12:35:20 · 379 阅读 · 0 评论 -
线性表当中的顺序存储结构
顺序存储结构是线性表当中的物理存储结构之一,线性表的顺序存储结构指的是一段地址连续的存储单元依次存储线性表的数据元素顺序存储方式就是在内存当中找了块地,通过占位的形式,把一定内存空间给占了,然后把相同数据类型的数据元素依次存放在这块空地当中 线性表当中的每个数据元素的类型都是相同的,所以我们可以用C语言的一维数组去实现这个顺序存储结构下面就简单的介绍下其的结构的定义#in...原创 2018-07-02 13:39:20 · 310 阅读 · 0 评论 -
线性表的链式存储结构
其实线性表的顺序存储结构最大的缺点就是插入和删除的时候需要移动大量的元素,这样的话会很耗费时间,为了解决这个问题,我们可以去是使用链式存储结构,但是链式存储结构就做不到随机访问了线性表的链式存储结构的特点就是可以用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的,在链式的存储结构当中除了要存储数据元素信息之外,还要存储它的后继元素的存储地址我们通常...原创 2018-07-02 21:30:26 · 509 阅读 · 0 评论 -
静态链表
在有些语言当中是没有指针的,比如说Basic、Fortan等早期的编程高级语言,由于没有指针,链表结构如果像我们实现单链表的形式来实现肯定是实现不了了,所以我们就想出了用数组来代替指针 我们让数组的元素都是由两个数据域组成,data和cur,也就是说数组的每一个下标都对应一个data和一个cur,数据域data,用来存放数据元素,cur则是相当于单链表当中的next指针,这种用数组描述的指...原创 2018-07-03 14:34:40 · 611 阅读 · 0 评论 -
循环链表
将单链表中的终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相连接的单链表称为是单循环链表,简称为循环链表对于循环链表我们一样一般都会去设置一个头结点,因为这样可以使其和非空链表处理一致非空的循环链表如下所示对于循环链表和单链表的处理主要差异其实是在于判断循环的条件上,原来是判断p->next是否为空,现在是判断p->next不等于头结...原创 2018-07-03 18:41:23 · 873 阅读 · 0 评论 -
双向链表
双向链表(double linked list)是在单链表的每个结点中,再设置一个指向其前驱结点的指针域,所以在双向链表中的结点都有两个指针域,一个指向直接后继,另一个指向直接前驱其的结构定义如下所示“/* 线性表的双向链表存储结构 */typedef struct DulNode{ ElemType data; struct DuLNode *prior;...原创 2018-07-03 18:54:32 · 264 阅读 · 0 评论 -
栈的基本概念
栈就是限定仅在表尾进行插入和删除操作的线性表我们通常把允许插入和删除的一段称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出(Last In First Out)的线性表,简称为LIFO结构 栈的插入操作我们一般称为是进栈、栈的删除操作,我们一般称为出栈关于栈的抽象数据类型如下所示ADT 栈(stack)Dat...原创 2018-07-03 20:17:50 · 755 阅读 · 0 评论 -
栈的链式存储结构
栈的链式存储结构称为链栈,对于链栈来说,基本不存在栈满的情况,除非内存已经没用可以使用的空间,如果真的存在这种情况的话,那么就说明此时的计算机操作系统已经快要死机了,那么我们就没必要再去关注溢出的问题了关于链栈的结构如下所示 关于链栈的程序定义如下所示typedef struct StackNode{ SElemType data; struct Sta...原创 2018-07-03 20:34:15 · 656 阅读 · 0 评论 -
栈的基本应用
其实栈在斐波那契数列当中其实就得到了应用关于斐波那契数列的数学定义如下所示 如果我们采取常规的迭代的方法去求的话其实也算比较简单了int main(){ int i; int a[40]; a[0] = 0; a[1] = 1; printf("%d ", a[0]); printf("%d ", a[1]); for...原创 2018-07-03 21:07:03 · 262 阅读 · 0 评论 -
队列的定义
队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出(First In First Out)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头 在我们利用键盘进行字母数字的输入显示到显示屏上其实就是利用了队列的形式,以及当我们电脑卡死的时候,我们鼠标乱点的操作其实都是记录了起来,等着电脑正常的时候,这些操作又会...原创 2018-07-05 01:05:42 · 6693 阅读 · 0 评论 -
关于二叉树的概念和性质
二叉树具有五种基本形态:1.空二叉树2.只有一个根结点3.根结点只有左子树4.根结点只有右子树5.根结点既有左子树又有右子树 下面再简单的介绍下一些特殊的二叉树1、斜树 所有的结点都只有左子树的二叉树叫左斜树。所有结点都是只有右子树的二叉树叫右斜树。这两者统称为斜树,斜树的每一层都只有一个结点,结点的个数与二叉树的深度相同2、满二叉树 在一棵二叉树中,...原创 2018-07-09 07:53:04 · 666 阅读 · 0 评论 -
关于树的存储结构的结点的表示方式
这里简单的主要介绍下三种对树的存储结构的表示双亲表示法如果我们以一组连续的存储空间存储树的结点,在每个结点当中我们去附加一个指示器指示其双亲结点的位置,其的结点结构如下所示 其中data是数据域,存储的是结点的数据信息,parent是指针域,存储的是该结点的双亲在数组当中的下标 以双亲表示法的结点结构的定义代码定义如下所示,根结点没有双亲,其的双亲域就设置为-1...原创 2018-07-09 07:14:31 · 930 阅读 · 0 评论 -
关于树结构的定义
树的定义其实关于树就是一对多的数据结构,关于其的定义如下所示 树(Tree)是n(n≥0)个结点的有限集。n=0时称为空树。在任意一棵非空树中:(1)有且仅有一个特定的称为根(Root)的结点;(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、……、Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree),关于其的结构如下所示在树当中的根...原创 2018-07-09 06:19:55 · 1138 阅读 · 0 评论 -
单链表的反转
关于单链表的反转是有一定的难度的,我说的自然是用链表来做,当然也可以用顺序表来做,不过如果加上了几个多余的结点那就很有难度了。。所以还是继续回到链表吧具体解析在代码...我们要测试的数据可以这么考虑有尾巴不反转的,地址取到上下界的以及正好是K的整数倍需要全反转的还有就是K=N的,大链表需要反转的,还有就是K=1就都不需要反转。还有就是有多余的结点。Ptr Reverse(Ptr head,int原创 2017-01-02 23:23:43 · 321 阅读 · 0 评论 -
优先队列、链表数组二叉搜索树的插入删除操作
在这里呢我想说一下优先队列的定义,优先队列又称特殊的队列为什么这么说呢因为队列就跟排队一样,排在前面的先出去,而优先队列取出元素依照元素的优先权大小,而不是元素进入队列的先后顺序。以下是数组,链表,有序数组,有序链表的插入删除操作的时间复杂度。 我们如果用查找树来做的话也就是二叉搜索树,如果树的高度是log2 n那插入的复杂度就是log2 n,也就是说我们如果用查找树来做插入和删除都原创 2017-01-04 18:45:39 · 656 阅读 · 0 评论 -
ZCMU-Average speed
Problem A: Problem A: Average SpeedTime Limit: 1 Sec Memory Limit: 128 MBSubmit: 54 Solved: 24[Submit][Status][Web Board]DescriptionProblem A: Average SpeedYou have bought a car in原创 2017-01-04 22:32:39 · 545 阅读 · 0 评论 -
数据结构绪论
我认为其实我们应该懂得数据,数据元素,数据项,数据对象,数据结构,逻辑结构,存储结构都是指什么,有了这些概念的理解,我们就能更好的学习数据结构这门课了。此处引用严蔚敏老师的几句话。 1.数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。原创 2017-01-06 18:44:46 · 439 阅读 · 0 评论 -
顺序表存储结构
线性表的顺序存储结构是一种随机存取的存储结构。比如存储一个多项式的系数和指数的线性表我们可以这么表示。#define MAXSIZE 100//多项式可能达到的最大长度typedef struct//多项式的定义{ float coef;//系数 int expn;//指数}Polynomial;typedef struct{ Polynomial *elem;/原创 2017-01-10 20:08:21 · 3914 阅读 · 0 评论 -
线性表和有序表的合并
比如说我们有两个集合A和B,我们要求一个新的集合A=AUB。比如说A=(1,4,3,11)B=(2,4,3)我们需要把这两个集合中的元素合并的话,我们就可以选择一个表为基础,然后往这个表当中不断的插入这个表当中没有的元素。如果在这里我们采用的是顺序存储结构那么时间复杂度为O(m*n),如果采取链式存储结构则为O(m+n)。void MergeList(List &LA,List LB)//将在线性原创 2017-01-10 23:00:53 · 1953 阅读 · 0 评论 -
字符串匹配-KMP、BF算法
KMP算法比BF算法的时间复杂度降了不知道多少,BF算法在最好的情况下时间复杂度是O(m+n),而最坏情况下的时间复杂度是O(m*n)因为BF算法是要让i的位置回溯的,遇到不匹配的回溯到i-j+2,而KMP算法是不需要回溯的。KMP算法仅当模式串和主串直接有存在许多部分匹配的情况下,才显得比BF算法快。BF算法在一般情况下其实还是O(m+n),其中n代表原串的长度,而m代表模拟串的长度。KMP算法原创 2017-01-25 12:55:05 · 742 阅读 · 0 评论 -
数据结构-散列表
先简单的引入下概念:在日常生活中我们去查找数据肯定会去查找数据,在查找的过程中,如果我们只去考虑各个元素的关键字之间的相对的大小,记录在存储结构中的位置和其关键字没有直接的关系,查找的实际就和表的长度有关,这样的话在结点的个数有很多的话,我们查找的过程就要去和很多其实无效的结点的关键字进行比较,这样的话查找的速度肯定会变慢。所以我们可以考虑在元素的存储位置和关键字之间去建立某种直接的关系,那么在进原创 2017-12-01 20:59:14 · 361 阅读 · 0 评论 -
数据结构基本概念和术语
我觉得数据结构是需要理论和实践相结合的,其实我很不愿意听到说理论没有用的话,我觉得知识是需要成体系的,你连一个面都没有,为什么就能成长的很厉害?当然纯理论肯定是不够的,所以其实还需要配合一定的实践操作,我觉得读书就是一个修养问题,下面就先简单的介绍下其基本的概念数据结构其实是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科 数据是描述客观事...原创 2018-07-01 22:36:59 · 722 阅读 · 0 评论 -
算法绪论
基本介绍 怎么说呢,我觉得这部分知识还是有必要去了解下的,所以这边也是做一个整理和记录算法其实就是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作 算法具有五个基本特性:输入、输出、有穷性、确定性和可行性输入和输出其实就是指比如说算法具有零个或多个输入,算法至少有一个或多个输出,比如说我通过printf去打印出Hello wo...原创 2018-07-02 09:37:55 · 246 阅读 · 0 评论 -
串的基本概念
对于数据结构的这些方面其实主要是为了做个总结,记录知识点串的定义:是由零个或多个字符组成的有限序列,也称为字符串串当中的字符数目n称为是串的长度,零个字符的串可以称为是空串,需要注意的是这个空串和空格串是不同的,空格串是只包含空格的串,空格串是有长度的,可以不止有一个空格 子串与主串,串中任意个数的连续字符组成的子序列称为该串的子串,相应地,包含子串的串称为主串,子串在主串...原创 2018-07-06 13:03:31 · 7462 阅读 · 2 评论