- 博客(55)
- 资源 (12)
- 收藏
- 关注
原创 全局变量和局部变量在内存中的区别
答:有区别。全局变量保存在内存的全局存储区中,占用静态的存储单元;局部变量保存在栈中,只有在所在函数被调用时才动态地为变量分配存储单元。该题目考查的知识点是变量的存储类型及性质。C语言经过编译之后将内存分为以下几个区域:(1)栈(stack):由编译器进行管理,自动分配和释放,存放函数调用过程中的各种参数、局部变量、返回值以及函数返回地址。操作方式类似数据结
2016-06-29 22:27:14 27204
转载 C++编写线程池
#include #include #include using namespace std;#define WM_THREADSTART WM_USER+1#define WM_THREADEND WM_USER+2#define WM_THREADADD WM_USER+3#define WM_THREADPOOLEND WM_USER+4#define WM_THREA
2016-06-29 22:12:58 360
原创 一棵树是否为另一棵树的子结构
题目描述输入两颗二叉树A,B,判断B是不是A的子结构。问题描述:给定两个二叉树的根节点,判断第二树是否是第一个树的子树,如果是返回1,否则返回0.分析:这个是百度的一道笔试题目,属于经典的数据结构问题,子树判断问题,针对这个问题可以采用递归的方法判断, 拿第二个树的每个节点去和第一个树做匹配,如果某个节点匹配成功,就接着往下匹配,否则重新从第
2016-06-29 21:45:53 1995
原创 合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。非递归版本/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public:
2016-06-29 20:59:11 344
原创 无线安全配置(wifi 认证,加密)
http://www.360doc.com/content/12/0601/20/9424702_215282780.shtml#
2016-06-27 22:13:14 1321
原创 反转链表
题目描述输入一个链表,反转链表后,输出链表的所有元素。链表的反转问题(递归和非递归方式)定义一个方法(函数),实现输入一个链表的头结点,然后可以反转这个链表的方向,并输出反转之后的链表的头结点。typedef struct Node{ int data; Node *next;} Node, *List;链表类的问题,涉及到了很多指针的
2016-06-27 15:55:09 322
原创 输出该链表中倒数第k个结点
输入一个链表,输出该链表中倒数第k个结点。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* FindKthToTail(
2016-06-27 11:13:13 954
原创 数值的整数次方Power
题目:实现函数double Power(double base,int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大树问题。这道题目有以下几点需要注意:0的0次方是无意义的,非法输入0的负数次方相当于0作为除数,也是无意义的,非法输入base如果非0,如果指数exponent小于0,可以先求base的|exponent|次方,然后再求倒
2016-06-26 09:25:48 555
原创 C++的初始化问题
首先,我们应该明确的是在C++中初始化不是赋值,因为初始化是必要的,如果读取了未初始化的值将会导致不明确的行为。初始化指创建变量并且给它赋初值,而赋值则是擦除对象的当前值并用新值代替。C++支持两种初始化变量的方式:复制初始化和直接初始化。int ival(1000);//直接初始化是将初始化式放在括号里int ival=1000;//复制初始化是用等号(=)那么这
2016-06-25 20:00:45 489
原创 一棵树是否为另一棵树的子树
问题描述:给定两个二叉树的根节点,判断第二树是否是第一个树的子树,如果是返回1,否则返回0.分析:这个是百度的一道笔试题目,属于经典的数据结构问题,子树判断问题,针对这个问题可以采用递归的方法判断, 拿第二个树的每个节点去和第一个树做匹配,如果某个节点匹配成功,就接着往下匹配,否则重新从第二个树的的根节点开始。测试用例:树1
2016-06-25 17:27:46 960
原创 字符串和数字之间的转换(C/C++)
1、字符串数字之间的转换(1)string --> char * string str("OK"); char * p = str.c_str();(2)char * -->string char *p = "OK"; string str(p);(3)char * -->CString char *p ="OK"; CSt
2016-06-24 11:04:45 1298
原创 快速排序
实现快速排序的关键在于现在数组中选择一个数字,接下来将数组中的数字分为两部分,比选择的数字小的数字移到数组的左边,比选择的数字大的数字移到数组的右边。代码实现如下:#include #include using namespace std;int RandomInRange(int start, int end){ srand(time(NULL)); return sta
2016-06-23 17:50:06 415
原创 最大连续子向量(分治策略和扫描算法)
问题及简单算法本章引入的问题来自一维的模式识别,问题的输入是具有n个浮点数的向量x,输出是输入向量的任何连续子向量中的最大和。 例如,如果输入向量包含以下 N = 10 个元素: arr[N] = { 31, -41, 59, 26, -53, 58, 97, -93, -23, 84 } 那么该程序的输出为x[2…6]的总和,即187。 该问题分为以下几种情况:
2016-06-21 12:17:41 863
原创 STL源码剖析——仿函数(函数对象)
1 仿函数也称为函数对象,是一种具有函数特质的对象。调用者可以像函数一样的使用这些对象,例如在很多STL算法中,都可以看到,我们可以将一个方法作为模板内的参数传入到算法实现中,例如sort的时候我们可以根据我们传入的自定义的compare函数来进行比较排序。解决办法是使用函数指针,或者是将这个“操作”设计为一个所谓的仿函数,再用这个仿函数生成一个对象,并用这个对象作为算法的一个参数。
2016-06-20 16:20:32 839
原创 STL源码剖析——set相关算法
STL中定义的set要求元素不得重复且已经排序。而set算法要求的都是有序区间(输出也是有序的),但元素可以重复出现。STL提供了4个set相关的算法,分别是并集(union)、交集(intersection)、差集(difference)和对称差集(symmetric difference),这4个算法接受的set必须是有序区间,都至少接受4个参数,分别表示两个set区间。一般而言,se
2016-06-20 11:54:24 1543
原创 STL源码剖析——stl_algobase.h
STL标准中没有区分基本算法或复杂算法,单SGI把常用的一些算法定义在只中,其他算法定义在中。stl_algobase.h中的算法,比较值得学习的是copy(),它“无所不用其极”的改善效率。copy的目的是复制一段元素到指定区间,复制操作最容易想到赋值操作符=,但是有的赋值操作符=是trivial的,可以直接拷贝。关于赋值操作符=是不是trivial的,可以参考“Member
2016-06-20 10:52:55 3444
原创 STL源码剖析——stl_numeric.h
在STL中,算法是独立于特定的数据结构,称为泛型算法。本节介绍的数值算法是在源码SGI STL中的文件,具体功能详见下面的源码剖析,在源码剖析的时候,针对每个元素都给出了使用例子,这样可以增加对其理解。#ifndef __SGI_STL_INTERNAL_NUMERIC_H#define __SGI_STL_INTERNAL_NUMERIC_H__STL_BEGIN_NAMESPAC
2016-06-18 15:28:40 1710
原创 STL源码剖析——hash_map和hash_multimap
SGI STL中的map底层以红黑树实现,hash_map以hash table实现。hash_map不允许插入重新键值,hash_multimap允许插入重复键值。这两者的关系就像map和multimap的关系。底层的hash table提供的大部分的操作,hash_map(hash_multimap)大部分都是直接调用hash table的函数。hash_multimap和ha
2016-06-18 09:26:20 1695
原创 STL源码剖析——hash_set和hash_multiset
STL只规定接口和复杂度,对于具体实现不作要求。set大多以红黑树实现,但STL在标准规格之外提供了一个所谓的hash_set,以hash table实现。hash_set的接口,hash_table都提供了,所以几乎所有的hash_set操作都是直接调用hash_table的函数而已。除了hash_set,还有hash_multiset,它们两个的关系就像set和multiset
2016-06-18 09:21:32 526
原创 STL源码剖析——hashtable
二叉搜索树具有对数时间的搜索复杂度,但是这样的复杂度是再输入数据有足够的随机性的假设上哈希表在插入删除搜索操作上也具有常数时间的表现,而且这种表现是以统计为基础,不需要依赖输入元素的随机性hashtable提供对任何有名项的存取操作和删除操作,可以视为一种字典结构,负载系数:元素个数除以表格大小,除非使用开链,负载系数永远在0,1之间碰撞的解决方
2016-06-17 13:38:39 2207
原创 STL源码剖析——multimap
multimap和map的关系和multiset和set关系一样,multimap允许有重复的键值,它在使用底层数据结构红黑树用,插入操作用的是insert_equal,而不是insert_unique。G++ 2.91.57,cygnus\cygwin-b20\include\g++\stl_multimap.h 完整列表/* * * Copyright (c) 1994 * Hew
2016-06-17 10:06:20 676
原创 STL源码剖析——multiset
STL中的set不允许键值重复,因此就有了multiset。multiset和set操作一样,功能一样,但是multiset允许键值重复,在使用红黑树的插入操作是,用的是insert_equal,而set用的是insert_unique,其他代码一样。G++ 2.91.57,cygnus\cygwin-b20\include\g++\stl_multiset.h 完整列表/* * * C
2016-06-17 10:05:20 359
原创 STL源码剖析——map
map是STL中的标准关系容器,它存储的元素时pair,拥有键值key和实值value。按照键值key存储到红黑树中。map中不允许两个键值相同的元素。当元素插入到红黑树中后,键值key不可以再修改,但是其实值value可以修改,因为map的迭代器不是constant iterator,而是mutable iterator。G++ 2.91.57,cygnus\cygwin-b20\inc
2016-06-17 09:24:05 467
原创 STL源码剖析——set
SET是STL中的标准容器,SET里面的元素会根据键值自动排序,它不像map那样拥有实值value和键值key的对应,set只有实值。SET的底层实现时RB-tree,当插入到RB-tree中后,其值不能再更改,因为更改就意味着可能不符合RB-tree的特性了,所以其迭代器set::iterator是RB-tree的constrant iterator。由于SET底层是RB-tree,所以SE
2016-06-17 09:10:16 1505
原创 STL源码剖析——stl_tree.h
STL中,关联式容器的内部结构是一颗平衡二叉树,以便获得良好的搜索效率。红黑树是平衡二叉树的一种,它不像AVL树那样要求绝对平衡,降低了对旋转的要求,但是其性能并没有下降很多,它的搜索、插入、删除都能以O(nlogn)时间完成。平衡可以在一次或者两次旋转解决,是“性价比”很高的平衡二叉树。RB-tree(red black tree)红黑树是平衡二叉树。它满足一下规则(1)每个节点不是红色
2016-06-17 08:56:58 1958
转载 STL源码剖析——红黑树(RB-tree)
本套源码剖析把重点放在红黑树的3种插入情况,与红黑树的4种删除情况。其余的能从略则尽量简略。目录:一、左旋代码分析二、右旋三、红黑树查找结点四、红黑树的插入五、红黑树的3种插入情况六、红黑树的删除七、红黑树的4种删除情况八、测试用例好的,咱们还是先从树的左旋、右旋代码,开始(大部分分析,直接给注释)://一、左旋代码分析/*------
2016-06-16 22:51:12 632
转载 STL源码剖析——RB-tree
一、红黑树概述 红黑树和我们以前学过的AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。不过自从红黑树出来后,AVL树就被放到了博物馆里,据说是红黑树有更好的效率,更高的统计性能。这一点在我们了解了红黑树的实现原理后,就会有更加深切的体会。 红黑树和AVL树的区别在于它使用颜色来标识结点的高度,它所追求的是局部平衡而不是AVL
2016-06-16 22:43:32 1702
转载 教你初步了解红黑树
教你初步了解红黑树 作者:July、saturnman 2010年12月29日本文参考:Google、算法导论、STL源码剖析、计算机程序设计艺术。推荐阅读:Left-Leaning Red-Black Trees, Dagstuhl Workshop on Data Structures, Wadern, Germany, Fe
2016-06-16 21:57:49 228
原创 哈夫曼树
一、哈夫曼树的概念和定义 什么是哈夫曼树?让我们先举一个例子。判定树: 在很多问题的处理过程中,需要进行大量的条件判断,这些判断结构的设计直接影响着程序的执行效率。例如,编制一个程序,将百分制转换成五个等级输出。大家可能认为这个程序很简单,并且很快就可以用下列形式编写出来: if(score<60) cout<<"Bad"<<endl;
2016-06-15 18:37:11 2469
转载 同一进程的线程共享的资源和独有的资源
线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。 进程拥有这许多共性的同时,还拥有自己的个性。有了这些个性,线程才能实现并发性。这些个性包括: 1.线程ID 每个线程都有自己的线程ID,这个ID在本进程中是唯一的
2016-06-15 16:19:45 730
原创 TCP/IP详解——数据链路层
1.概述 数据链路层属于计算机网络的底层,使用的信道主要有点对点信道和广播信道两种类型。 在TCP/IP协议族中,数据链路层主要有三个目的: 1)为IP模块发送和接收数据 2)为ARP模块发送ARP请求和接收ARP应答 3)为RARP模块发送RARP请求和接收RARP应答 TCP/IP支持多
2016-06-15 15:56:53 10316 1
原创 TCP/IP详解——概述
为什么会有TCP/IP协议在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别。就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样。计算机使用者意识到,计算机只是单兵作战并不会发挥太大的作用。只有把它们联合起来,电脑才会发挥出它最大的潜力。于是人们就想方设法的用电线把电脑连接到了一起。但是简单的连到一起是远远不够的,就
2016-06-15 15:51:21 436
原创 STL源码剖析——priority_queue
一、概述priority_queue,首先它是一个queue,即只允许在低端加入元素,并从顶端取出元素,除此之外别无其他存取元素的途径(故priority_queue不提供遍历功能,也不提供迭代器);再次它具有priority,即queue中的元素具有一定的priority:其内的元素自动依照元素的权值排列,权值最高者(也就是数值最高),排在最前面。注:在queue并非
2016-06-15 11:23:31 595
原创 STL源码剖析——heap
Heap堆是常用的数据结构,Heap中也可以存放元素。但是STL中并没有提供Heap容器,只是提供了关于Heap操作的算法。只要支持RandomAccessIterator的容器都可以作为Heap容器。Heap分为max heap和min heap,max heap中每次取出的结点时heap结构中值最大的结点,min heap中每次取出的结点时heap结构中值最小的结点。在实际应用中,经常
2016-06-15 11:03:23 2484
原创 STL源码剖析——queue
stack 是一种配接器(adapter),以某种容器作为底部结构,改变其接口,使之符合"先进先出"的特性。SGI STL 默认以 deque 为 stack 底部结构,没有遍历行为,没有遍历器。queue是一种先进先出(First In First Out, FIFO)的数据结构,它在前后有两个出口,分别成为队头和队尾.queue允许在队尾追加元素和访问队尾元素, 在队头获取和移除元素,
2016-06-15 10:48:41 751
原创 STL源码剖析——stack
stack容器配接器stack是一种“先进后出”的数据结构,它只能在栈顶对数据进行操作,即只能在栈顶进行新增元素、移除元素、取得最顶端元素。不能进行遍历行为,所以不需要设计自己的迭代器。在SGI STL的源码的设计中,它是基于某种容器作为底部结构的,默认容器是deque容器,用户也可以自己指定容器的类型。 由于源码比较短,同时是基于其他容器进行操作的,这里只给出源码的剖析
2016-06-15 10:29:22 813
原创 STL源码剖析——slist
slist是SGI STL里面的一个单向链表,不过这个不属于标准定义,所以,G++下面不能用,另外看了下VS2008里面也没有。不过看到书上这一部分讲解,还是配合SGI的代码做一个了解。一般情况下使用标准的list就可以满足要求了,而且会更加方便,list的分析可以参考STL笔记之list一文。因为slist是单向链表,所以它的迭代器类型为forward_iterator。1. slist
2016-06-15 10:16:20 604
原创 STL源码剖析——deque
一、deque的中控器deque是连续空间(至少逻辑上看来如此),连续线性空间总令我们联想到array或vector。array无法成长,vector虽可成长,却只能向尾端成长,而且其所谓的成长原是个假象,事实上是(1)另觅更大空间;(2)将原数据复制过去;(3)释放原空间三部曲。如果不是vector每次配置新空间时都有留下一些余裕,其成长假象所带来的代价将是相当高昂。 de
2016-06-14 21:50:27 2154
原创 STL源码剖析——list
相较于vector的连续线性空间,list就显得复杂许多,它的好处是每次插入或删除一个元素,就配置或释放一个元素空间。因此,list对于空间的运用有绝对的精准,一点也不浪费。而且,对于任何位置的元素插入或元素移除,list永远是常数时间。 list不仅是一个双向链表,而且还是一个环状双向链表。另外,还有一个重要性质,插入操作和接合操作都不会造成原有的list迭代器失效,这在vecto
2016-06-07 20:04:26 1852
转载 STL源码剖析——vector
// Filename: stl_vector.h// Comment By: 凝霜// E-mail: mdl2009@vip.qq.com// Blog: http://blog.csdn.net/mdl13412/* * * Copyright (c) 1994 * Hewlett-Packard Company * * Permissi
2016-06-07 19:56:10 362
STL源码讲解文档
2016-06-05
STL源码剖析 候捷配套
2016-06-05
STL source code
2016-06-05
SX1278模块
2015-11-18
BLE-CC41-A蓝牙模块
2015-11-18
SX1276/1278LoRa模块测试程序
2015-11-18
BLE-CC41-A蓝牙模块驱动程序
2015-11-18
虚拟化知识
2015-08-18
操作系统:精髓与设计原理02(读书笔记)
2015-07-26
操作系统:精髓与设计原理01(读书笔记)
2015-07-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人