随笔分类 -  数据结构

摘要:转自:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中 阅读全文
posted @ 2017-05-10 19:22 请叫我小小兽 阅读(323) 评论(0) 推荐(0)
摘要:在看剑指offer的时候,感觉这三个题目很像,都是用哈希表可以解决,所以把这三个题整理出来,以供复习。 剑指offer35题:第一个只出现一次的字符 题目描述:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出‘b’. 题目分析:统计字符串每个字符出现的次数,然后找出第一个只 阅读全文
posted @ 2017-02-18 20:23 请叫我小小兽 阅读(424) 评论(0) 推荐(0)
摘要:在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码,请编写一个函数使用递归的方法生成N位格雷码。 给定一个整数n,请返回n位的格雷码,顺序为从0开始。 测试样例: 1 返回:["0","1"] 阅读全文
posted @ 2017-02-17 08:17 请叫我小小兽 阅读(317) 评论(0) 推荐(0)
摘要:题目描述:如下类型CMyString的声明,请为该类型添加赋值运算符函数。 class CMyString{public: CMyString(char* pData = NULL); CMyString(const CMyString& str); ~CMyString(void);private 阅读全文
posted @ 2017-01-22 22:31 请叫我小小兽 阅读(136) 评论(0) 推荐(0)
摘要:选择排序有两种,一种是选择排序,一种是堆排序。 选择排序就是将最大的数和最小的数选出来放到边界,然后缩小范围再选出次大的和次小的放到边界然后再缩小范围直到数组中只剩下最后一个数,这时排序完成。 代码如下: void SelectSort(int *a, int size){ assert(a); i 阅读全文
posted @ 2016-11-20 22:19 请叫我小小兽 阅读(230) 评论(0) 推荐(0)
摘要:排序是一种很基本的算法,由于代码量不是很大,逻辑较清晰,因此排序算法在笔试中占有很重要的位置。排序算法有很多种大致分为插入排序,选择排序,交换排序,归并排序四种。插入排序分为直接插入排序和希尔排序。 直接插入排序的思想是:在要排序的一组数中,假设前面(n-1)(n>2)个数是有序的,现在要把第n个数 阅读全文
posted @ 2016-11-19 15:56 请叫我小小兽 阅读(203) 评论(0) 推荐(0)
摘要:腾讯面试题: 给40亿个无符号整形的不重复的数据,如何迅速判断一个数是否在这40亿个数中。 分析:40亿个数据实在太多并且不重复,并且我们不必知道这些数据的大小,只需标记这些数是否存在。因此我们可以想到用位图来解决这个问题,这样只需占大概500M的内存空间。实现方法如下: #pragma once# 阅读全文
posted @ 2016-11-05 23:25 请叫我小小兽 阅读(212) 评论(0) 推荐(0)
摘要:#pragma once#include<vector>template<class K>struct __HashFunc{ size_t operator()(const K&key) { return key; }};template<>struct __HashFunc<string> // 阅读全文
posted @ 2016-11-05 10:52 请叫我小小兽 阅读(1123) 评论(0) 推荐(0)
摘要:#pragma onceenum colour //子节点的颜色{ RED, BLANK,};template<class K,class V>struct RBTreeNode{ K _key; V _value; RBTreeNode<K, V>* _left; RBTreeNode<K, V> 阅读全文
posted @ 2016-11-04 16:58 请叫我小小兽 阅读(409) 评论(0) 推荐(0)
摘要:AVL树是高度的平衡二插搜索树,其左子树和右子树的高度之差不超过1(树中的左子树和右子树都是AVL树),维持这个高度之差就要控制它的平衡因子。那么判断一颗AVL树是否平衡就需要判断它的左子树和右子树高度差是否为1,并且子树也遵循这个原则。这里我们可以用递归的方法来判断这颗二叉树是否为平衡二叉树,看他 阅读全文
posted @ 2016-10-26 20:53 请叫我小小兽 阅读(2847) 评论(2) 推荐(0)
摘要:AVL树又称为高度的平衡二叉树,它能保持二叉树高度的平衡,尽量降低二叉树的高度,较少树的平均搜索长度。如下是二叉搜索树比较极端的一种情况,这使得二叉搜索树效率降低。而AVL树就是为了解决这一问题。 AVL树有哪些性质呢?首先它的左子树和有字数的高度差不超过1,并且它的左子树和右子树都要是AVL树才可 阅读全文
posted @ 2016-10-23 11:30 请叫我小小兽 阅读(260) 评论(0) 推荐(0)
摘要:size_t _FindLeafSize(Node* root) //求二叉树叶子节点的个数 { //static size_t count = 0; if (root == NULL) return 0; if (root->_left == NULL&&root->_right == NULL) 阅读全文
posted @ 2016-10-15 17:56 请叫我小小兽 阅读(3361) 评论(0) 推荐(0)
摘要:void _PrevOrderNR(Node* root) //非递归前序遍历 { if (root == NULL) return; Node* cur = root; stack<Node*> s; while(cur||!s.empty()) { while (cur) { cout << c 阅读全文
posted @ 2016-10-15 16:05 请叫我小小兽 阅读(331) 评论(0) 推荐(0)
摘要:堆排序是一种常见的排序算法,因为他的时间复杂度相比较于其他排序来说是比较优化的了。他的思想就是:先建一个大堆(即堆顶元素是堆中最大的),然后将堆顶元素与堆的最后一个元素交换,堆的大小减一(此时堆中最后一个元素已经是堆中最大的了),然后对剩下的元素再进行排序,如此循环,当堆中元素只剩一个的时候堆排序就 阅读全文
posted @ 2016-10-15 10:46 请叫我小小兽 阅读(168) 评论(0) 推荐(0)
摘要:应用场景:2015年春节期间,A公司的支付软件某宝和T公司某信红包大乱战。春节高峰以后,公司Leader要求后台攻城狮对后台的海量的数据进行分析。先要求分析出各地区发红包最多的前100位用户。现在知道人最多的S地区大约有100W用户,要求写一个算法实现。 分析:看到这里,问题可以简化为求很多个数据中 阅读全文
posted @ 2016-10-12 09:32 请叫我小小兽 阅读(287) 评论(0) 推荐(0)
摘要:#pragma once#include<iostream>using namespace std;#include<vector>template<class T> //仿函数struct Less{ bool operator()(const T&l, const T&r) //重载括号 { r 阅读全文
posted @ 2016-10-11 20:22 请叫我小小兽 阅读(191) 评论(0) 推荐(0)
摘要:广义表是一种非线性表的数据结构,是线性表的一种推广。他放松了对原子的控制,容许原子有自身的结构。其实现如下: #include<iostream>using namespace std;#include<assert.h>enum Type //原子类型有三种:头结点,子表节点和值节点{ HEAD, 阅读全文
posted @ 2016-09-28 22:26 请叫我小小兽 阅读(471) 评论(0) 推荐(0)
摘要:关于二叉树的功能有二叉树的创建和销毁,前序遍历,中序遍历,后续遍历,求二叉树中节点的个数,求二叉树的深度,查找二叉树中的某一个节点 #include<iostream>using namespace std; template<class T>struct BinaryTreeNode{ T _da 阅读全文
posted @ 2016-09-28 10:40 请叫我小小兽 阅读(225) 评论(0) 推荐(0)
摘要:strstr函数用于判断str2是否是str1的子串,如果是,则返回str2在str1中首次出现位置的地址,如果不是则返回NULL.其模拟实现代码如下:#include<iostream> using namespace std;#include<assert.h>char* my_strstr(c 阅读全文
posted @ 2016-09-27 18:38 请叫我小小兽 阅读(1543) 评论(0) 推荐(0)
摘要:4.判断元素出栈,入栈顺序的合法性,如入栈序列是(1,2,3,4,5),出栈序列是(4,5,3,2,1)是合法序列入栈序列是(1,2,3,4,5),出栈序列是(1,5,3,2,4) 思路:首先判断栈的长度,如果小于0则退出。根据给定的出栈序列,不断地进行入栈出栈操作,如果所有元素都能全部入栈并且出栈 阅读全文
posted @ 2016-09-17 14:37 请叫我小小兽 阅读(469) 评论(0) 推荐(0)