自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 问答 (1)
  • 收藏
  • 关注

原创 深度优先搜索

深度优先搜索的优先遍历深度更大的顶点,所以我们可以借助栈这一数据结构来实现:1 将要访问的第一个顶点 v 入栈,然后首先对其进行访问;2 将顶点 v 出栈,依次将与顶点 v 相邻且未被访问的顶点 c 压入栈中;3 重复第一步操作,直至栈为空。#include <iostream>#include <vector>#include <cstring>using namespace std;cla

2016-05-31 23:13:41 238

原创 图的基本知识及实现_邻接矩阵_邻接表

对于有 nn 个顶点的图 G = (V, E)来说,我们可以用一个 n * n的矩阵 AA来表示 G中各顶点的相邻关系,如果 v_{i}和 v_{j}之间存在边(或弧),则 A[i][j] = 1, 否则 A[i][j] = 0。 下图为有向图 G_{1}G1 ​​ 以及对应的邻接矩阵。下图为无向图 G_{2}G2 ​​ 以及对应的邻接矩阵。图的邻接矩阵是唯一的,矩阵的大小只与顶点个

2016-05-30 14:17:24 1405 1

原创 SBTree的左旋右旋以及各种调整操作的基本实现(包含查找第k大的数值)

在完成了左旋和右旋操作之后,我们要实现调用两种单旋操作的逻辑,也就是调整操作。在插入之后,一共有 44 种触发旋转的情况,分别为 LL 型、LR 型、RR 型和 RL 型。通过旋转的名称,可以很直观的想到其对应的不平衡的情况——比如 LR 型,就意味着左子树(L)的右子树(R)的元素个数过大。还记得我们之前讲到过的,SBTree 的平衡条件么?一共有两个:a: size[right[t]] ≥ ma

2016-05-30 12:37:38 550 1

原创 AVL_SBTree _基本原理

所有平衡树基本由以下三个特征组成:自平衡条件 旋转操作 旋转的触发 平衡树通过设置合理的自平衡条件,使得二叉排序树的查找、插入等操作的性能不至于退化到 O(n)O(n),并且在进行二叉排序树的查找、插入等操作时进行判断,如果满足其中某个旋转的触发条件,则进行对应的旋转操作。AVL 树是最早发明的一种平衡树。AVL 树的名称来源于它的两个发明者:G.M. Adelson-Velsky 和 E.M

2016-05-30 10:50:37 516

原创 二叉树_二叉搜索树_二叉排序树

二叉排序树又称为二叉查找树,二叉搜索树。二叉排序树和普通的二叉树在结构上一样,它要么是一棵空树,要么是这样的一棵二叉树:对任意结点,如果左子树不为空,则左子树上所有结点的权值都小于该结点的权值;如果右子树不为空,则右子树上所有结点的权值都大于该结点的权值;任意结点的左子树和右子树都是一棵二叉排序树;一般而言, 二叉排序树上结点的权值都是唯一的。在二叉排序树上,对于任意结点,如果有左子树和右子树,那么

2016-05-29 01:19:46 244

转载 Huffman树基本原理介绍

我们把每个字符看成一个结点,权值是字符的频率,每个字符开始都是一棵只有根结点的二叉树,如下图。 1.从集合里取出根结点权值最小的两棵树 I 和 J 组成新的二叉树 IJ,根结点权值为 1 + 1 = 2,将二叉树 IJ 加入集合,把 I 和 J 从集合里删除,如下图。 2.从集合里取出根结点权值最小的两棵树 H 和 G 组成新的二叉树 HG,根结点权值为 1 + 2 = 3,将二叉树 HG

2016-05-28 21:20:43 270

原创 二叉树_已知先序中序求后序

二叉树的性质:二叉树的第 i 层最多有 2i - 1 个结点。由定义可知,二叉树的每个结点最多有两个孩子结点,那么第 i 层最多的结点数等于第 i - 1 层最多结点数的 2 倍。而第 1 层最多只有 1 个结点,所以我们可以知道第 i 层最多有 2i - 1 个结点。深度为 k 的二叉树最多有 2k - 1 个结点。由上一个性质,我们可以知道二叉树每层最多的结点个数,从第 1 层到第 k 层把最多

2016-05-28 21:09:59 437

原创 哈希表_判断输入用户名重复否

第一行输入用户名总数后面逐行输入用户名实现判断当前输入用户名是否已存在逐行输出结果YES用户名存在 NO不存在#include <string>using namespace std;class HashTable {private: string *elem; int size;public: HashTable() { size = 2000;

2016-05-28 17:25:04 425

原创 哈希表简介_基本操作

哈希表又叫散列表,关键值通过哈希函数映射到数组上,查找时通过关键值直接访问数组。在上面的例子里,我们将用户名通过哈希函数映射成一个整数,也就是数组的存储位置,在检测时用同样方法计算出存储位置,如果位置上已有元素则表示用户名已经被注册。哈希函数指的是关键值和存储位置建立的对应关系,查找时只要根据这个关系就能找到目标位置。一般我们只要通过一次查找就能找到目标位置,但有些关键字需要多次比较和查找才能找到,

2016-05-28 17:07:53 735

转载 栈_火车调度

一个火车调度站的容量为n,若入站口有编号为1、2、…、n的n节车厢,编写算法输出n节车厢的所有出站序列。用回溯法设计该问题的递归算法, 调度站当前状态下,只有两种操作: (1)若入站口车厢非空,则将入站口的k号车厢入栈,进入下一个状态继续试探(递归调用); (2)若调度站非空,则将栈顶车厢出栈进入出站序列,进入下一个状态继续试探(递归调用);#include <iostream>#inclu

2016-05-28 00:29:34 1364

转载 栈_火车调度

#include <iostream>#include<vector>#include<stack>using namespace std;void schedule(vector<int> &a, stack<int> &b, vector<int> &c, int sizec, int starta, int &n){if(sizec == a.size())//完成一种调度,输出调

2016-05-28 00:14:06 903

原创 栈_极简单表达式运算

栈_极简单表达式运算极简单表达式运算: 运算符只有*,+ 表达式中只有数字和运算符 数字只有一位#include<iostream>#include<string>#include<cassert>using namespace std;template<class Type> class Stack {private: Type *urls; int max_siz

2016-05-27 01:59:57 328

原创 栈_数列反转

栈_数列反转#include<iostream>#include<string>#include<cassert>using namespace std;template<class Type> class Stack {private: Type *urls; int max_size, top_index;public: Stack(int length_in

2016-05-27 01:34:04 455

原创 栈的基本操作

栈的基本操作注:利用模板类建类,进行栈定义 模板类定义在整个类定义之前#include<iostream>#include<string>#include<cassert>using namespace std;template<class Type> class Stack {private: Type *urls; int max_size, top_index;p

2016-05-27 01:25:20 260

原创 循环队列基本实现

循环队列的基本实现#include <iostream>#include <cassert>using namespace std;class Queue {private: int *data; int head, tail, length, count;public: Queue(int length_input) { data = new in

2016-05-26 22:30:33 304

原创 队列的基本实现

队列的基本实现TIP:宏断言assert(<表达式>); 利用宏断言,如果不满足则说明队列空,直接返回;#include <iostream>#include <cassert>using namespace std;class Queue {private: int *data; int head, tail, length;public: Qu

2016-05-26 22:07:14 340

原创 哪位同学最优秀

每份简历都有一个对应的 id,编号从 1 开始,依次从第一份简历到最后一份简历。boss 会从简历里抽掉 M 份简历,每次他会念一个他认为不够吉利的数字 numi,然后从第一份简历开始数,数到第 numi 份时,就会把对应的简历抽调,接着念下一个数字。抽掉 M 份简历后,boss 从剩余的简历中,取出最中间的一份简历,然后点点头念道:“我相信这位同学一定最优秀,哈哈”。现在蒜头君想知道这份简历的 i

2016-05-26 21:28:07 1031

原创 约瑟夫环_循环链表实现

输入n,m; n个人,每次第m个人出列#include<iostream>using namespace std;class Node {public: int data; Node* next; Node(int _data) { data = _data; next = NULL; }};class LinkList {

2016-05-25 23:46:18 333

原创 链表

#include<iostream>using namespace std;class Node {public: int data; Node* next; Node(int _data) { data = _data; next = NULL; }};class LinkList {private: Node*

2016-05-25 21:29:25 278

原创 顺序表_循环左移

顺序表的构造、插入、扩展、查找、删除、遍历这 6 种操作。一种新的操作:循环左移。

2016-05-25 18:08:01 2055

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除