数据结构与算法
文章平均质量分 76
对常用数据结构和算法进行分析,运用数据结构和算法解决实际当中的问题。
_stark
这个作者很懒,什么都没留下…
展开
-
创建和引用单链表
首先让我们看看单链表的定义:单向链表:1:单链表有一个头节点head,指向链表在内存的首地址。2:链表中的每一个节点的数据类型为结构体类型,节点有两个成员:整型成员(实际需要保存的数据)和指向下一个结构体类型节点的指针即下一个节点的地址(事实上,此单链表是用于存放整型数据的动态数组)。3:链表按此结构对各节点的访问需从链表的头找起,后续节点的地址由当前节点给出。4:无论在表原创 2016-04-09 12:06:23 · 2469 阅读 · 0 评论 -
二叉树的创建和相关算法
二叉树是一种非常重要的数据结构,它是分支结构的基础,今天本人将写一篇博客来叙述一下其相关的算法以及二叉树的创建过程!1:二叉树的创建:主要有 先序,中序,后序,层序创建几种方式,其中前三种建立在二叉树遍历方式的基础上的。(1):先序创建 先序创建就是先创建根节点,随后依次创建其左子树和右子树,我们可以采用递归的方法来实现,因为二叉树本身就是建立在递归算法的基础上的。(2原创 2016-05-29 15:37:03 · 15604 阅读 · 2 评论 -
单链表的有关算法
#include "LinkList.h"void InitLinkList(pLinkList plist) //对链表进行初始化,让头节点指向NULL{ assert(plist); plist->phead = NULL;}void DestoryLinkList(pLinkList plist) //释放单链表每一个节点的内存,避免内存泄漏{ assert(原创 2016-06-17 16:45:48 · 453 阅读 · 0 评论 -
AVL Tree(上)
1:定义AVL树又称平衡二叉搜索树,它的任意一个节点的左右子树的高度差不超过1,这样能减少数的高度,以达到减少搜索次数的目的。2:AVL节点的结构 //Key Value结构的AVL树 K _key; AVLTreeNode<K, V>* _Left; AVLTreeNode<K, V>* _Right; AVLTreeNode<K, V>* _parent;原创 2016-10-25 23:01:38 · 538 阅读 · 0 评论 -
红黑树 RB Tree
前言前面我们已经提到过了二叉搜索树和AVL树两种查找树,二叉搜索树最好情况下(为完全二叉树)查找的时间复杂度为O(lgN),最坏情况下(类似于单链表)的时间复杂度为O(N)。而AVL树则是对二叉搜索树的一种优化,他保证一个节点的左右子树的高度差不超过+-1的绝对值,从而减小了一棵树的高度,通过减小树的高度的方式来减小查找数据的时间复杂度。而今天所要提到的红黑树是通过一系列的负责设置确保没有一条路径能原创 2016-10-29 14:04:49 · 3432 阅读 · 0 评论 -
HashTable 哈希表/散列
前言在前面,我们提到过了几种搜索结构的树,二叉搜索树是根据左孩子节点的值小于根节点,右孩子节点的值大于根节点而建立的,当我们把n个数据插入到二叉搜索树中,最好情况下(数据插入后是一颗完全二叉树)我们查找数据的时间复杂度为O(lg(N)),但是当我们按照一定的顺序往二叉搜索树中插入数据时,它会呈现一个线性的状态,这时候查找数据的时间复杂度为O(N).为了对这种情况进行优化,我们提出了AVL树的结构,A原创 2016-11-04 20:46:10 · 755 阅读 · 0 评论 -
浅析三种多路搜索树
B树家族磁盘I/O操作的基本单位为块。从磁盘上读取信息时,会把包含信息的整个块读入内存;将信息存储到磁盘上时,也需要将整个块写到磁盘上。当每次从磁盘上请求信息时,都必须先在磁盘上定位该信息。磁头移动到包含所请求信息的磁盘位置上方。然后,将磁盘旋转,将磁头下方的整个块传送到内存。也就是说,数据访问时间由几个时间段组成:访问时间=寻道时间+转动延迟+数据传送时间与在内存中传送信息相比,这个过程是相当原创 2016-11-17 11:10:12 · 5587 阅读 · 0 评论 -
基数排序
非比较排序前面我们介绍过的排序算法都属于比较排序,比较排序需要在排序的过程中对数据的大小进行比较,从而排除正确的顺序;那是不是必须要比较才能给数据进行正确的排序呢?当然不是,今天我们就来介绍一种非比较排序——基数排序。非比较排序的算法思想##不进行比较就能排出数据的算法都需要借助哈希直接地址法的思想,开始时把哈希表中的数据初始化为0,先遍历所要排序的数组,遍历到的数组的元素直接作为哈希表的直接地址,原创 2016-11-26 20:25:42 · 927 阅读 · 0 评论 -
浅析快速排序
快排的引入快速排序被称为世界十大算法之一,就像他的名字一样,速度快,效率高,是一种优秀的排序算法。今天我们来介绍几种快速排序的实现方法;以及快速排序的思想。算法思想## 快速排序采用了分治的算法思想,先找出一个基准元素,然后定义两个指针分别指向拍序序列的头和尾(不包含基准元素),left负责找大于基准元素的数,right负责找小于基准元素的数,一趟交换直到left和right交换为止,最后把l原创 2016-11-30 16:46:08 · 536 阅读 · 0 评论 -
【数据结构】二叉树面试题总结
为了对二叉树的知识进行巩固,今天我们来解析5道二叉树的经典面试题。 这五道面试题如下:求二叉树中最远两个结点的距离;判断一棵树是否是完全二叉树;由前序和中序遍历序列重建二叉树 (前序序列:1 2 3 4 5 6 - 中序序列:3 2 4 1 6 5);求二叉树两个结点的最近公共祖先;将二叉搜索树转化成有序的双向链表;现在我们来对这五道题进行分析:求二叉树中最远的两个节点之间的距离这原创 2016-12-01 18:11:35 · 2701 阅读 · 0 评论 -
由一道面试题到并查集
面试题引入问题描述:假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友(好友的好友的好友…),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共有多少个朋友圈。假如:n = 5, m = 3, r = {{1 , 2} , {2 , 3} ,{4 , 5}},表示有5个人,1和2是好友,2和3是好友,4和5是好友,则1、2、3属于一个朋友圈,4、5属于另一个朋友圈,结果为原创 2016-12-03 11:49:07 · 1433 阅读 · 1 评论