
数据结构
MU_kaka
仰天大笑出门去,我辈岂是蓬蒿人
展开
-
(一)队列和链表和栈(线性结构)
一. 队列1. 队列的数组实现因为要考虑复用问题,所以要实现循环队列,思路如下(rear== front不能判断队列是空还是满,所以考虑牺牲一个空间)(1). front:指向队列的第一个元素,初始值为0(2).rear:指向队列最后一个元素的后一个位置,初始值为0(3).当队列空时,rear== front(4).当队列满时:(rear+1)%maxsize ==...原创 2019-08-26 00:02:06 · 307 阅读 · 0 评论 -
(五)平衡多路查找树(B-Tree B+Tree)
B-tree就是我们常说的B树,常常用于实现数据库索引,因为它的查找效率比较高前面提到的2-3树可以看作B树的一种实例一.为什么不用二叉搜索树用B树? 二叉查找树的时间复杂度是O(logN),查找次数和比较次数较少,但是对于磁盘的IO次数,最坏情况下磁盘的IO次数由树的高度决定,所以减少磁盘IO次数就必须压缩树的高度,让瘦高的树尽量变成矮胖的树,这样B树就诞生了二.B-...原创 2018-06-30 10:26:47 · 9600 阅读 · 4 评论 -
(七)图论
1.深度优先搜索(DFS)/** * 深度优先搜索(DFS, Depth First Search) * DFS使用栈(stack)来实施算法过程 * stack具有后进先出LIFO(Last Input First Output)的特性,DFS的操作步骤如下: */// 1、把起始点放入stack;// 2、重复下述3步骤,直到s...原创 2018-06-18 18:33:47 · 140 阅读 · 0 评论 -
(四)哈夫曼树(Huffman Tree)
一.什么是哈夫曼树? 树的带权路径长度(WPL):每个叶子结点带权路径长度之和 哈夫曼树(最优二叉树):带权路径长度最小的二叉树二.哈夫曼树的构造 每次把权值最小的两棵二叉树合并三.哈夫曼树的特点 1.没有度为1的结点 2.n个叶子结点的哈夫曼树共有2n-1个结点(n2 = n0 -1),没有度为1的结点,所以n=n0+n2=2n-1四....原创 2018-06-18 15:13:46 · 1288 阅读 · 0 评论 -
(六)堆(heap)
一. 优先队列(Priority query)1.优先队列:特殊的队列,取出元素的顺序是按照优先权大小,而不是元素进入队列的先后顺序。2.如何实现优先队列呢?优先队列最重要的两个操作就是插入任意一个元素和删除最大值(1)最初考虑使用有序数组或有序链表,但数组插入元素的时间复杂度是o(n),链表寻找位置的时间复杂度是o(n),两者总不能达到令人满意的时间复杂度。...原创 2018-06-18 13:59:10 · 168 阅读 · 0 评论 -
(三)平衡二叉树(ALV)
1.搜索树节点不同的插入次序,将导致不同深度和平均查找长度ASL2.平衡因子(Balance Factor ,简称BF):BF(T) = hL -hR(左子树高度-右子树高度)3.平衡二叉树:空树或者任一结点左右子树高度差的绝对值不超过1,即|BF(T)|<=14.高度为h的平衡二叉树的最小结点数:n(h) = n(h-1)+n(h-2)+15.给定节点数为n的AVL树...原创 2018-06-18 11:59:15 · 1232 阅读 · 0 评论