【Algorithms】
玛丽奥ZJY
这个作者很懒,什么都没留下…
展开
-
平衡二叉查找树(AVL)的查找、插入、删除
一.平衡二叉查找树平衡二叉查找树是带有平衡条件的二叉查找树。平衡条件:每个节点的左子树和右子树的高度差最多为1二叉查找树(其中空树的高度为-1)。二、平衡二叉树算法思想 若向平衡二叉树中插入一个新结点后破坏了平衡二叉树的平衡性。首先要找出插入新结点后失去平衡的最小子树根结点的指针。然后再调整这个子树中有关结点之间的链接关系,使之成为新的平衡子树。当失去平衡的最小子树被调整为平衡子树后,原有其...转载 2018-03-14 10:55:25 · 1794 阅读 · 0 评论 -
二叉树的存储方式以及递归和非递归的三种遍历方式
主要过程就是递归调用,也可以用栈来实现。对于先序遍历来说,蓝色剪头第一次经过的结点,就是遍历的序列,以后再次经历就不算进去了。typedef struct BiNode{ int data;//数据域 BiNode *lchild, *rchild;//左右孩子指针} BiNode, *BiTree;void preorder(BiNode *root){ if (r...转载 2018-03-14 10:17:06 · 205 阅读 · 0 评论 -
二叉树三种遍历方式的递归和循环实现
转载自:http://blog.csdn.net/lieacui/article/details/52453292树的定义和基本术语树(Tree)是n(n>=0)个结点的有限集T,T为空时称为空树,否则它满足如下两个条件: (1)有且仅有一个特定的称为根(Root)的结点; (2)其余的结点可分为m(m>=0)个互不相交的子集T1,T2,T3…Tm,其中每个子集又是一棵树,并称其为...转载 2018-03-14 10:16:01 · 2115 阅读 · 0 评论 -
看懂二叉树的三种遍历
二叉树的遍历分为以下三种:先序遍历:遍历顺序规则为【根左右】中序遍历:遍历顺序规则为【左根右】后序遍历:遍历顺序规则为【左右根】什么是【根左右】?就是先遍历根,再遍历左孩子,最后遍历右孩子;举个例子,看下图(图从网上找的):先序遍历:ABCDEFGHK中序遍历:BDCAEHGKF后序遍历:DCBHKGFEA以中序遍历为例:中序遍历的规则是【左根右】,我们从root节点A看起;此时A是根节点,遍历A...转载 2018-03-14 10:00:21 · 312 阅读 · 0 评论 -
数据结构:循环队列(C语言实现)
转载:http://blog.csdn.net/lpp0900320123/article/details/20694409生活中有很多队列的影子,比如打饭排队,买火车票排队问题等,可以说与时间相关的问题,一般都会涉及到队列问题;从生活中,可以抽象出队列的概念,队列就是一个能够实现“先进先出”的存储结构。队列分为链式队列和静态队列;静态队列一般用数组来实现,但此时的队列必须是循环队列,否则会造成巨...转载 2018-03-14 09:19:45 · 1280 阅读 · 1 评论 -
关于循环队列的一些讲解
转载:http://www.nowamagic.net/librarys/veda/detail/2351前面讲到了队列的“假溢出”,解决假溢出的办法就是后面满了,就再从头开始,也就是头尾相接的循环。我们把队列的这种头尾相接的顺序存储结构称为循环队列。比如昨天的例子,rear可以改为指向下标为0的位置,这样就不会造成指针指向不明的问题了。但是如果继续进行入队操作的话,比如继续插入a6、a7,则re...转载 2018-03-14 09:17:06 · 1660 阅读 · 0 评论 -
数据结构:栈的链式实现(C语言描述)
栈本质上是一个线性表,只不过对线性表的操作进行了限制,只可以在表的一端进行操作(插入、删除元素)。栈是一种是一种实现数据“先进后出”的存储结构,分为静态栈和动态栈,静态栈就是以数组的方式存储数据,动态栈是以链表的方式存储数据;对栈的操作算法,常用的就是压栈和出;下面将以链式的方式创建栈,并对用c语言实现栈的压栈和出栈的算法:1.栈的创建 在创建一个数据结构之前,必须知道这种数据结构由哪些参数...转载 2018-03-13 22:04:58 · 265 阅读 · 0 评论 -
学习心得:链表的操作(C语言实现)
今天将给大家讲述链表的学习心得。学习数据结构,毋庸置疑链表必须学好,后面的栈、队列、树、图都是以链表为基础的;链表的种类很多,有单链表、双链表、循环链表、非循环链表;在此,我们以非循环单链表为例,来讲链表的创建、求长度、排序、插入和排序。1.什么是链表 链表我的理解要包含以下特征:(1).由n个节点离散分配;(2).每个节点通过指针连接(3)每一个节点由一个前驱节点和一个后驱节点(4)...转载 2018-03-13 21:42:23 · 288 阅读 · 0 评论 -
插入排序算法详解及实现
插入排序相对冒泡排序而言是一种较为快捷方便的排序算法。冒泡排序:http://blog.csdn.net/llzk_/article/details/51547923插入排序原理很简单,讲一组数据分成两组,我分别将其称为有序组与待插入组。每次从待插入组中取出一个元素,与有序组的元素进行比较,并找到合适的位置,将该元素插到有序组当中。就这样,每次插入一个元素,有序组增加,待插入组减少。直到待插入组元...转载 2018-03-12 21:37:34 · 200 阅读 · 0 评论 -
冒泡排序算法及其优化
冒泡排序算是排序算法里面的一种较为简单的算法,也是我接触的第一种排序算法,有升序与降序之分,如果面试的时候面试官问道这个题目,一定要问清楚是升序还是降序,这样会给你加分。下面,我以升序来讲一下它的运作。1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。3、针对所有的元素重复以上的步骤,除了...转载 2018-03-12 21:36:29 · 144 阅读 · 0 评论 -
C语言选择排序详解及其实现
选择排序(Selection sort)是一种简单直观的排序算法。这次我们依然将其分为有序组与无序组。(推荐其他两种排序算法 冒泡排序:http://blog.csdn.net/llzk_/article/details/51547923插入排序:http://blog.csdn.net/llzk_/article/details/51628574)它的工作原理是每一次从无序组的数据元素中选出最小...转载 2018-03-12 21:34:07 · 2630 阅读 · 1 评论 -
数据结构:数组的操作(C语言描述)
数据的在计算机的存储方式分为:连续存储【数组】,非连续存储【链表、树、图and so on】;今天讨论的将是数组,包括数组的创建、打印输出,在数组后面追加元素,判断数组是否为空,判断数组是否为满,在数组的指定位置添加元素,在数组的指定位置删除元素,数组元素的倒置和数组元素的排序。对应的函数如下:[cpp] view plain copyvoid Init_arr(struct Array...转载 2018-03-15 09:22:21 · 1355 阅读 · 0 评论 -
红黑树系列之一:红黑树的概述
转载:http://blog.csdn.net/lpp0900320123/article/details/39524947一、红黑树(RBT)的定义1.红黑树的引入目的BST查找效率较低:查找最好时间复杂度O(lgn);查找最坏时间复杂度O(n).AVL查找效率较高查找最好、最坏时间复杂度都是O(lgn)要求完全平衡,建立查找结构代价比较大;2.红黑树的定义 红黑树和我们以前学过的AVL树类...转载 2018-03-14 10:56:50 · 305 阅读 · 0 评论