
数据结构
文章平均质量分 64
芮小谭
正面 积极
展开
-
java集合之Map的常见实现类(1)---HashMap
本篇文章我们主要来看看Map的相关内容。需要学习Collection详解的可以查看我的另一篇文章:java集合之CollectionMap1.1 Map 简介什么是Map?Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含一个键对象和一个值对象。其中,键对象不允许重复,而值对象可以重复,并且值对象还可以是 Map 类型的,就像数组中的元素还可以是数组一样...原创 2020-01-19 16:53:55 · 1903 阅读 · 2 评论 -
八大排序算法之交换排序
在之前两篇文章中,我们学习了插入排序和选择排序,八大算法之插入排序,八大算法之选择排序,这篇文章,我们来了解一下交换排序。 常用的交换排序有冒泡排序和快速排序,主要思想就是交换。1.冒泡排序基本思想:每相邻两个数比较,若大小与要排序顺序不同,则交换。 将序列当中的左右元素,依次比较,保证右边的元素始终大于左边的元素( 第一轮结束后,序列最后一个元素一定是当前序列的最大值;) 对序...原创 2018-09-04 15:24:24 · 924 阅读 · 0 评论 -
八大排序算法之选择排序
上一篇博客我们学习了插入排序之直接插入排序和希尔排序,八大排序算法之插入排序。 这篇文章我们来学习选择排序。 常见的选择排序有直接选择排序和堆排序。选择排序的基本思想就是从每一趟(比如第i趟)从其之后的n-i个待排序数据中找到关键码最小的数据,作为有序数据的第i个元素。当n-2趟排完之后,只剩下一个待排序数据,就不用进行选择了。1.直接选择排序基本思想:比较+交换 1)首先在未排...原创 2018-09-04 14:04:17 · 563 阅读 · 0 评论 -
八大排序算法之插入排序
在数据结构中,排序算法是处理数据经常遇到的,而排序又分为内排序和外排序。内排序是指排序期间,数据放在内存进行排序。外排序是指所要处理的数据量太大,不能一次放在内存中,排序过程中需要不断进行内外存之间移动的排序。选择合适的排序可以帮我们减少一些时间或者空间上不可避免的开销。 我们所说的八大排序算法,都是属于内排序。 插入排序常用的有直接插入排序和希尔排序。排序算法的基本思想是:每一步都待排序...原创 2018-09-04 10:08:24 · 853 阅读 · 0 评论 -
栈的基本概念及顺序栈上的操作
栈和队列是两种特殊的线性表,它们的逻辑结构和线性表相同,只是其运算规则较线性表有更多的限制,故又称它们为运算受限的线性表。栈和队列被广泛应用于各种程序设计中。 栈的基本概念栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表。 (1)通常称插入、删除的这一端为栈顶(Top),另一端称为栈底(Bottom)。 (2)当表中没有元素时称为空栈。 (3)栈为后进先出...原创 2018-07-14 18:20:37 · 1027 阅读 · 0 评论 -
队列基本概念及顺序队列上的操作
队列的基本概念只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表 进行插入操作的一端称为队尾(入队列) 进行删除操作的一端称为队头(出队列) 队列具有先进先出(FIFO)的特性 顺序队列1、队头不动,出队列时队头后的所有元素向前移动 缺陷:操作时如果出队列比较多,要搬移大量元素 2、队头移动,出队列时队头向后移动一个位置 如果再有F、G进行入...原创 2018-07-14 16:45:28 · 4433 阅读 · 0 评论 -
二叉树的基本操作
定义二叉树结构typedef char BTDataType;typedef struct BinTreeNode{ BTDataType _data;//当前节点值域 struct BinTree* _left;//指向当前节点左孩子 struct BinTree* _right;//指向当前节点右孩子}BTNode,*PBTNode; 二叉树的遍...原创 2018-07-14 16:12:46 · 324 阅读 · 0 评论 -
二叉树的基本概念
二叉树的概念一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节 点加上两棵分别称为左子树和右子树的二叉树组成特点:每个结点最多有两棵子树,即二叉树不存在度大于2的结点 二叉树的子树有左右之分,其子树的次序不能颠倒 因此:二叉树是通过上述5中形式的组合或嵌套而形成 满二叉树&完全二叉树满二叉树:在一棵二叉树中,如果所有分支结点都存在左...原创 2018-07-14 11:43:38 · 504 阅读 · 0 评论 -
链表与顺序表的优缺点比较
顺序表优点: 1.尾插效率高,便于随机访问 2.cpu缓存利用率高 3.存取速度高效,通过下标来直接存储缺点: 1.不利于插入和删除操作 2.不可以增长长度 链表优点: 1.物理存储单元上非连续,而且采用动态内存分配,能够有效的分配和利用内存资源; 2.节点删除和插入简单,不需要内存空间的重组。 缺点: 1.不能进行索引访问,只能从头结点开始顺序查找...原创 2018-07-14 10:56:03 · 8243 阅读 · 0 评论 -
判断两个链表是否相交并找出第一个相交节点
引言:链表问题是数据结构中的常见问题,对于面试、笔试都有很大的作用,那么如何判断两个链表是否相交并找出第一个相交节点?分析:找出两个链表的交点首先就是判断链表是否相交,那么首先来看什么是两个链表相交?一、什么是链表相交?数据结构的链表定义中存储了指向下一个元素的指针,如果当两个链表有交点时,即两个链表会在各自链表中的某个结点,同时指向了相同的下一个结点,即如下图所示: 图中...转载 2018-07-14 09:14:06 · 1810 阅读 · 0 评论 -
单链表经典面试题详解
面试官通过考察应聘者的编程语言、数据结构和算法来判断应聘者是否具备扎实的基础知识。而单链表又是数据结构中最基本的知识。在之前的文章中,我们已经介绍过了单链表的基本功能的代码实现,下面我们就基于基本的功能,来实现一些关于单链表的经典面试题的代码编写。链表结构定义:typedef int DataType;typedef struct LinkNode{ DataType...原创 2018-07-14 09:03:07 · 395 阅读 · 0 评论 -
C语言实现不带头节点的单链表
在上两篇文章中,我们介绍了基于静态数组和动态数组的顺序表,顺序表频繁查询而插入删除动作少的情况下,顺序表也适用于进行尾插的时候,因为相对于链表而言,顺序表在进行尾插时,顺序表不需要通过遍历来找到最后一个插入点,比较而言,顺序表尾插效率高。 但是,在进行头插和中插时,顺序表需要将插入元素位置之后的元素整体后移才能插入数据,这样做在有大量插入删除场景下即为麻烦且效率低,因此,提出了链表的思想。而链表...原创 2018-07-11 20:45:17 · 15127 阅读 · 1 评论 -
动态顺序表的基本操作
上一篇文章静态顺序表的基本操作,实现了静态顺序表的基本操作,不难发现静态顺序表有诸多缺陷,首先,进程中,需要开辟一大块空间供动态顺序表存储数据用,如果存储的数据不多(结点不多),会浪费很多内存;如果开辟空间比较少,而存储数据较多,又会存在数据存不下的情况,这都不是我们想要的,建立在这样的基础上,动态顺序表的就出现了,先来看一下动态顺序表的结构体:动态顺序表的定义:typedef in...原创 2018-07-11 10:12:21 · 914 阅读 · 1 评论 -
算法的复杂度——时间复杂度与空间复杂度
通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学归纳法等。而在证明算法是正确的基础上,第二步就是分析算法的时间复杂度。算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好反映出算法的优劣与否。因此,作为程序员,掌握基本的算法时间复杂度分析方法是很有必要的。 算法...原创 2018-06-28 15:02:22 · 1855 阅读 · 0 评论 -
数据结构与算法---基础概念篇
我们都知道 程序设计 = 数据结构 + 算法 首先我们先来认识数据结构和算法的基本概念。 相关概念: 数据:是描述客观事物的符号,是计算机中能够操作的对象,能够被计算机所识别、并输入给计算机处理的符号集合。 数据元素:是组成数据,有一定意义的基本单位,在计算机中常被作为整体处理,也被称之为记录。 数据项:一个数据元素有若干个数据项组成,是数据不可再分的最小单位。说明: 数据元素...原创 2018-06-28 11:41:48 · 713 阅读 · 0 评论 -
浅析红黑树(RBTree)原理及实现
我们在上一篇博客认识到了平衡二叉树(AVLTree),了解到AVL树的性质,其实平衡二叉树最大的作用就是查找,AVL树的查找、插入和删除在平均和最坏情况下都是O(logn)。AVL树的效率就是高在这个地方。如果在AVL树中插入或删除节点后,使得高度之差大于1。此时,AVL树的平衡状态就被破坏,它就不再是一棵二叉树;为了让它重新维持在一个平衡状态,就需要对其进行旋转处理, 那么创建一颗平衡二叉树的成...原创 2018-07-10 12:13:05 · 96215 阅读 · 52 评论 -
平衡二叉搜索树(AVL)详解
1.二叉搜索树(Binary Sort Tree)二叉搜索树,又称之为二叉排序树(二叉查找树),它或许是一棵空树,或许是具有以下性质的二叉树:若他的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别是二叉搜索树 二叉搜索树的这种特性,使得我们在此二叉树上查找某个值就很方便了,从根节点开始,若要寻找的值...原创 2018-07-09 17:53:13 · 38778 阅读 · 4 评论 -
静态顺序表的基本操作
相关概念: 线性表:n(n>=0)个数据元素组成的一个有限序列,可以在其任意位置上进行插入和删除操作的线性数据结构 从数据在物理内存存储形式上线性表分为:顺序表和链表 从上图可知: 线性表中的数据与数据之间存在一对一的关系,即除了第一个元素和最后一个元素之外,每个元素都有唯一的直接前驱和唯一的直接后继,第一个元素没有前驱,最后一个元素没有后继。顺序表用一段地址连续的存...原创 2018-06-30 08:25:31 · 642 阅读 · 0 评论