计蒜客学习笔记
文章平均质量分 91
Adherer
sunshine
展开
-
树,二叉树的一些基础知识以及二叉树的建立,存储操作
首先,我们要明白,什么是树?这是大自然中一棵树的模型照片而在数据结构中的树,会是什么样的结构呢?树形结构广泛存在我们的现实生活里,下面两张图你一定不陌生吧,第一张是 Linux 文件系统结构,第二张是美国福特汽车公司的汽车家谱图。类似的树形结构还有很多,他们都可以抽象成数据结构里的树。和自然界里的树有所类似又有所不同,他们都有且仅有一个树根,树上的元素都是从树根衍生出来的。不同原创 2016-03-02 16:21:18 · 1256 阅读 · 0 评论 -
堆的概念及基本操作实现
1.堆的基本概念:严格来讲,堆有不同的种类,但是我们在算法学习中,主要用的还是二叉堆,而二叉堆有最大堆和最小堆之分。最大(最小)堆是一棵每一个节点的键值都不小于(大于)其孩子(如果存在)的键值的树。大顶堆是一棵完全二叉树,同时也是一棵最大树。小顶堆是一棵完全完全二叉树,同时也是一棵最小树。需要注意的问题是:堆中的任一子树也还是堆,即大顶堆的子树也都是大顶堆,小顶堆同样。原创 2016-03-25 17:28:12 · 11946 阅读 · 1 评论 -
hash表的一些基本知识
问题引入:我们在网站上注册账号时,当填好用户名后,系统都会判断用户名是否已被使用,如果已被使用,系统就会提示该用户名已被注册。充满好奇心的小明想知道系统是如何检测用户名是否被使用的。他能想到的最简单的方法就是逐个比较,但是如果用户名有很多,查找效率就显得很低;还有一种方法就是把用户名按字典序排序,二分查找,这个方法的效率的确是高了很多,可是前提是用户名是有序的,有些时候我们并不能将用户名进行排原创 2016-02-27 21:12:49 · 4748 阅读 · 0 评论 -
C++栈的初始化,入栈,出栈,获取栈顶元素等操作
栈的一些性质:1.栈为空不可以出栈2.栈顶元素先出3.新元素插入栈顶栈的初始化:#include#includeusing namespace std;template //模板,表示可以"动态"定义Stack中某些数据元素的类型,这样的话可以增加代码的重用性 class Stack{ private: Type原创 2016-02-26 22:21:32 · 22952 阅读 · 1 评论 -
C++实现普通队列,循环队列的基本操作(初始化,入队,出队,获取队列首元素等)
队列是一种先进先出(FIFO,First-In-First-Out)的线性表,通常用链表或者数组来实现。队列只能在队尾插入元素,只能在队首删除元素。队列的一些性质:1.出队方案唯一2.队首元素先出3.新元素插入队尾线性队列的初始化:#include using namespace std;class Queue{private: int *data;原创 2016-02-26 21:31:32 · 30198 阅读 · 0 评论 -
图的基本概念及存储
1.什么是图?在一个社交网络中,每个帐号和他们之间的关系构成了一张巨大的网络,就像下面这张图:那么在电脑中,我们要用什么样的数据结构来保存这个网络呢?这个网络需要用一个之前课程里未提到过的数据结构,也就是接下来要讲解的图结构来保存。到底什么是图?图是由一系列顶点和若干连结顶点集合内两个顶点的边组成的数据结构。数学意义上的图,指的是由一系列点与边构成的集合,这里我们只原创 2016-03-12 19:38:30 · 969 阅读 · 0 评论 -
并查集的一些基本概念以及基本操作(初始化,合并,查询等操作)
首先要明白的是为什么会有并查集这种数据结构的出现,我们知道,对于一些比较常见的实际问题,举个简单的例子比如说,我们要在一个无重复数据的数组中寻找一个指定的元素,那么最简单的方法就是直接for循环一遍暴力查找即可时间复杂度为O(n),花费时间为线性时间,而现在如果我们把这个常规问题抽象化,即在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定原创 2016-03-11 20:29:53 · 7647 阅读 · 1 评论 -
哈夫曼编码问题再续(下篇)——优先队列求解
上篇描述了哈夫曼编码问题的基本描述以及建造一个哈夫曼树的过程分析,那么当算法已经描述清楚之后,我们要怎么样来实现代码呢?或者说,给你一些带有权值的叶子节点,要怎么样利用程序快速算出所对应的哈夫曼树的带权路径WPL呢?我们首先回顾一下上篇讲到的那个问题:例如有这一个字符串“good good study day day up”,现在我们要对字符串进行哈夫曼编码,该字符串一共有 26原创 2016-03-30 22:21:20 · 2787 阅读 · 1 评论 -
C++单链表的初始化,插入,删除,反转操作
链表的性质:1.元素不能随机访问2.链表只有一个表头3.元素相互依赖,串联而成链表的初始化:#includeusing namespace std;class Node{public: int data; Node *next; Node(int _data){ data = _data; next = NULL原创 2016-02-20 17:18:54 · 24959 阅读 · 3 评论 -
二叉树的先序,中序,后序遍历实现
首先,我们要了解一下,二叉树三种遍历算法的定义:1.先(根)序遍历的递归算法定义:若二叉树非空,则依次执行如下操作:⑴ 访问根结点;⑵ 遍历左子树;⑶ 遍历右子树。2.中(根)序遍历的递归算法定义:若二叉树非空,则依次执行如下操作:⑴遍历左子树;⑵访问根结点;⑶遍历右子树。3.后(根)序遍历得递归算法定义:若二叉树非空,则依次执行如下操作:⑴遍历原创 2016-03-03 21:50:02 · 1025 阅读 · 0 评论 -
哈夫曼树和哈夫曼编码基本概念及构造(上篇)
1.哈夫曼编码的起源:哈夫曼编码是 1952 年由 David A. Huffman 提出的一种无损数据压缩的编码算法。哈夫曼编码先统计出每种字母在字符串里出现的频率,根据频率建立一棵路径带权的二叉树,也就是哈夫曼树,树上每个结点存储字母出现的频率,根结点到结点的路径即是字母的编码,频率高的字母使用较短的编码,频率低的字母使用较长的编码,使得编码后的字符串占用空间最小。2.哈夫曼树构造原创 2016-03-12 10:58:08 · 5738 阅读 · 0 评论