- 博客(27)
- 资源 (6)
- 收藏
- 关注
原创 【数据结构与算法】Hash表
Hash表也称散列表,也有直接译作哈希表,Hash表是一种特殊的数据结构,它同数组、链表以及二叉排序树等相比较有很明显的区别,它能够快速定位到想要查找的记录,而不是与表中存在的记录的关键字进行比较来进行查找。这个源于Hash表设计的特殊性,它采用了函数映射的思想将记录的存储位置与记录的关键字关联起来,从而能够很快速地进行查找。 Hash表的设计思想 对于一般的线性表,比如链
2015-09-26 11:18:12 742
原创 【数据结构与算法】哈夫曼树
1. 哈夫曼树的基本概念 哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。 所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的带权路径长度记为: WPL=(W1*L1+W2*L2+W3*L3+...+ Wn*Ln) N个权值Wi(i=1,2,...n)构成一棵有N个
2015-09-12 16:00:33 1345
原创 【数据结构与算法】图
一、概念 定义: 图由点集合和边集合组成,记做G=(V,E),其中点集合不能为空且应该有穷,边集合可以为空。 ①有向图:边有方向,用表示 ②无向图:边没有方向,用(Vi,Vj)表示 ③完全图:每两个顶点之间都有连线,有向完全图的边有n(n+1)个;无向完全图有n(n+1)/2个边。 ④路径和回路:路径是指从一个点到另外一个点走过的路
2015-09-12 15:51:18 1331
原创 各类排序小结
——O(n*n)——①冒泡排序时间复杂度,最差、平均都是O(n*n),最好是O(n),空间复杂度 1,是一种稳定的排序②直接插入时间复杂度,最差、平均都是O(n*n),最好是O(n),空间复杂度 1,是一种稳定的排序③直接选择排序时间复杂度,最差、平均都是O(n*n),空间复杂度 1,是一种不稳定的排序——O(n*logn)——①快速排序时间复杂
2015-09-11 16:25:56 535
原创 【排序】希尔排序法
希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效
2015-09-11 15:54:14 716
原创 【排序】堆排序法
二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆。当父结点的键值总是小于或等于任何一个子节点的键值时为最小堆。下图展示一个最小堆:
2015-09-11 14:53:18 151
原创 【排序】归并排序法
分治的基本思想:是将原来的问题分解成若干个规模更小但结构与原问题想死的子问题,然后递归去解决这些子问题,最后将这些子问题的解的组合作为原问题的解。 首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。//将有序数组a[]和b[]合
2015-09-11 14:29:29 421
原创 【排序】直接选择排序
直接选择排序思想:先把0位置设置为索引,接着用index(索引)向后找最小的, 每一趟分别把最小的放在前面,然后和原来前面的数据交换位置。 时间复杂度:O(n*n) 代码:#include using namespace std;#define MAXN 100int a[MAXN + 1]; //全局变量存数组int main() {
2015-09-11 14:12:20 588
原创 【排序】插入排序法
插入排序(insertion sort)的基本思想:每次将一个待排序的记录,按其关键字大小插入到前面已经排序好的序列中,直到全部记录插入完成为止. 直接插入排序 基本思想 假设待排序的记录存放在数组R[1..n]中。初始时,R[1]自成1个有序区,无序区为R[2..n].从i = 2起直到i = n 为止,依次将R[i]插入当前的有序区R[1
2015-09-11 14:02:09 1037
原创 【排序】冒泡排序法
冒泡排序法,是最简单的一种排序方法,从第一个位置开始与相邻位置比较,判断是否需要交换位子。 第一趟从第一个位置开始,直到最后一个位置,A[n-1],确定最大(以升序为例子)的数放在最后一位,A[n-1] 第二趟,继续从第一个位置开始,倒数第二位,A[n-2],确定倒数第二大的数在倒数第二位A[n-2] …… 算法复杂度:冒泡排
2015-09-11 13:48:50 622
原创 【排序】快速排序法
分治的基本思想:是将原来的问题分解成若干个规模更小但结构与原问题想死的子问题,然后递归去解决这些子问题,最后将这些子问题的解的组合作为原问题的解。 快速排序的图解过程如下:代码:#include using namespace std;#define MAXN 100int a[MAXN + 1], n; //全局变量存数组void QuickSort(i
2015-09-11 13:36:15 746
原创 输入不定长度的整数的显示
说明:输入一行整数,数与数之间用空格隔开,换行符表示结束。注意:每次输入的整数数目不确定。样例输入:1 3 5 2 6 7 9换行(换行符表示结束)#include using namespace std;int main(){ int n=0,a[100]; int i=0; char ch=0; while(ch!= '\n')
2015-09-10 16:08:21 725
原创 【程序员面试宝典】RTTI与运算符重载
❀RTTI RTTI(Run-Time Type Identification)是面向对象程序设计中一种重要的技术。现行的C++标准对RTTI已经有了明确的支持。不过在某些情况下出于特殊的开发需要,我们需要自己编码来实现。和很多其他语言一样,C++是一种静态类型语言。其数据类型是在编译期就确定的,不能在运行时更改。然而由于面向对象程序设计中多态性的要求,C++中的指针或引用(Re
2015-09-09 19:38:58 605
原创 【程序员面试宝典】检测并修改不合适的继承
面试例题1:如果鸟是可以飞的,那么鸵鸟是鸟么?鸵鸟如何继承鸟类?[美国某著名分析软件公司2005年面试题]解析:如果所有鸟都能飞,那鸵鸟就不是鸟!回答这种问题时,不要相信自己的直觉!将直觉和合适的继承联系起来还需要一段时间。 根据题干可以得知:鸟是可以飞的。也就是说,当鸟飞行时,它的高度是大于0的。鸵鸟是鸟类(生物学上)的一种。但它的飞行高度为0(鸵鸟不能飞)。
2015-09-09 15:36:22 661
原创 【生活杂想】谨言慎行
上午10点参加华为网络能源部门的宣讲,去之前知道这个部门是偏硬件方向,问了相关负责的同学,被告之也有软件相关的,便打印了简历匆匆去了。 因为算是开学的第一个宣讲会,参加的同学还是蛮多的,后面站了大概三排人,还好有熟人比我去的早,便蹭了半个凳子坐下。因为考虑到站着的人比较多,宣讲人很体谅的说,会讲的快一些,所以,原本原定2个小时讲完的宣讲,在1个小时之内讲完,只是,在最后环节的岗位介绍中,
2015-09-09 11:16:45 515
原创 STL中的模板介绍
详细文档下载:http://download.csdn.net/detail/haoxiaodao/9082557泛型编程就是一种通用编程技术,适用于不同类型的数据,STL就是一种典型的泛型编程,它包含容器和模板。容器的介绍在:http://blog.csdn.net/haoxiaodao/article/details/48244527这里主要介绍模板是什么?模板包含
2015-09-06 15:37:56 116
原创 STL中的所有容器资料
第一类容器(支持迭代器)❀序列容器Vector(随机迭代访问)【向量】说明:vector是一种动态数组,是基本数组的类模板。其内部定义了很多基本操作。#include 注意:头文件没有“.h”构造:vector v1; // 默认构造函数vector v2(init_size,0); //如果预先定义了:int init_size;他的成员值都被初始化为0;
2015-09-06 15:18:30 571
原创 c++的深拷贝和浅拷贝
对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。#include using namespace std; class CExample {private: int a;public: CExample(
2015-09-05 21:38:34 334
原创 简易火车票售票系统
#include #include using namespace std;#define maxsize 100int n;//全局站点总数int max=0,min=0;int ship[maxsize][maxsize]={0};//全局票数矩阵int maxnum(int a[]){ int i=0; int max=0; for(i=0;i<n;i++) {
2015-09-01 20:29:25 2059
原创 最佳路径
分析问题:创造结构体,包含三个量,存储源ID,目标ID,从源到目标的距离。根据输入建立邻接矩阵表,最后通过三重循环,找到最短距离矩阵表,最后按照给定的源和目的ID输出最短距离。代码:#include #include using namespace std;#define MAX 10000#define maxsize 100struct node{ int s;//源
2015-09-01 19:16:12 1215 1
原创 胜负猜想
分析问题:这一题其实本质上是求最大递增子序列长度的问题,比如213的最大递增子序列长度为2,则甲胜出(因为len-2=1,len是长度)2222的最大递增子序列长度为1,则假胜出(因为len-1=3,len是长度)而222则是乙胜出。代码:#include #include using namespace std;#define maxsize 100bool isdig(st
2015-09-01 17:14:01 433
原创 逆波兰表达式
逆波兰表达式又叫做后缀表达式。它的语法规定,表达式必须以逆波兰表达式的方式给出。正常的表达式 逆波兰表达式a+b ---> a,b,+a+(b-c) ---> a,b,c,-,+a+(b-c)*d ---> a,b,c,-,d,*,+a+d*(b-c)--->a,d,b,c,-,*,+a=1+3 ---> a=1,3 +(1-2)*(3+6)---> 1,2,-,3
2015-09-01 16:46:39 870
原创 火星计算器
大体来看,程序主要流程为这么几步 1. 将得到的字符串进行去空格处理。 2. 将第1步得到的字符串(此为中缀形式)转换为逆波兰式(后缀式) 3. 将第2步得到的逆波兰式(RPN)进行计算,求出结果并输出。代码:#include #include #include #include #include using namespace std;#define MAX
2015-09-01 15:19:58 715
原创 【循环列表】之魔术师的扑克牌问题
问题描述:在一次晚会上,一位魔术师掏出一叠扑克牌,取出其中13张黑桃,预先洗好后,把牌面朝下,对观众说:“我不看牌,只数一数就能知道每张牌是什么?”魔术师口中念一,将第一张牌翻过来看正好是A;魔术师将黑桃A放到桌上,继续数手里的余牌,第二次数1,2,将第一张牌放到这叠牌的下面,将第二张牌翻开,正好是黑桃2,也把它放在桌子上。第三次数1,2,3,前面二张牌放到这叠牌的下面,取出第三张牌,正好是黑
2015-09-01 10:48:29 1925 1
原创 【循环列表】之约瑟夫问题
约瑟夫问题:n个人围成一圈,从第一个开始报数1,报数到第m个的人将被杀掉,然后继续下一个人报数1,再次报数到m的人被杀掉,这样循环报数,最后剩下一个,其余人都将被杀掉。由n个人围城一圈,我们想到用循环列表解决问题历史来历:据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也
2015-09-01 09:52:41 696
原创 【线性表】之链式存储结构
线性表有两种普遍的存储方式:顺序存储和链式存储。顺序存储的最大特点是简单,简单的读取操作方便,而其致命的缺点是当进行插入或删除操作时,需要移动大量的元素,耗费时间,而此缺点链式存储恰可以完美的解决。下面是链表一系列操作的代码,用户自定义函数主要包括:/*//创建一个链表_头插法√//创建一个链表_尾插法√//置空表√//求列表长度√//取得节点i位置的数值√
2015-09-01 09:28:51 508
C++程序设计
2017-12-01
混合高斯背景建模程序实现+说明
2014-09-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人