- 博客(35)
- 资源 (26)
- 收藏
- 关注
转载 贪心算法--哈夫曼编码问题
1、问题描述 哈夫曼编码是广泛地用于数据文件压缩的十分有效的编码方法。其压缩率通常在20%~90%之间。哈夫曼编码算法用字符在文件中出现的频率表来建立一个用0,1串表示各字符的最优表示方式。一个包含100,000个字符的文件,各字符出现频率不同,如下表所示。 有多种方式表示文件中的信息,若用0,1码表示字符的方法,即每个字符用唯一的一个0,1串表示。若采用定长编码表
2013-09-30 14:30:32 3227 1
转载 printf函数与cout参数压栈顺序问题
对于VC++编译环境:printf函数与cout: 输入顺序是从右到左, 输出顺序从左到右.例1:#includevoid main(){ int i=2; printf("%d,%d,%d,%d\n",i++,++i,i,i++); printf("%d\n",i);}输出结果:3,3,2,25解释:1、printf函数输入
2013-09-30 14:26:48 1343
转载 rand函数和srand函数
首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明。rand(产生随机数)表头文件: #include定义函数 :int rand(void)函数说明 :因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,rand()会返回一随机数值,范围在0至RAND
2013-09-30 13:52:40 989
转载 PPP协议全面分析
什么是PPP协议?用于何种信道的链路层控制?PPP的工作原理。 PPP即用户计算机和ISP进行通信时所使用的数据链路层协议。用于点对点信道。 工作原理: 1)当用户拨号接入ISP 时,路由器的调制解调器对拨号做出确认,并建立一条物理连接。 2)PC 机向路由器发送一系列的LCP 分组(封装成多个 PPP 帧)。 3)这些分组及其响应选择一些PPP
2013-09-28 23:56:15 2270
转载 c++中临时变量不能作为非const的引用参数
试看下面的代码:#include using namespace std; void f(int &a) { cout } void g(const int &a) { cout } int main() { int a = 3, b = 4; f(a + b); //编译错误,把临时变量作为非const的引用参数传递了 g(a + b
2013-09-25 19:04:15 1474
原创 UDP全面分析
IP分片与网络的MTU有关.先来看看MTU:MTU(Maximum Transmission Unit)是网络上传送的最大数据包.MTU的单位是字节.例如,Ethernet在一个帧中仅仅能够发送1500个字节,而16MB/sToken Ring的典型的MTU每个帧是17914个字节.RFC791规定,MTU最大是65535个字节,最小是68个字节.当IP层收到一份要发送的IP数据包
2013-09-23 14:53:40 1623
转载 ICMP协议详解
ICMP全称Internet Control Message Protocol(网际控制信息协议)。提起ICMP,一些人可能会感到陌生,实际上,ICMP与我们息息相关。在网络体系结构的各层次中,都需要控制,而不同的层次有不同的分工和控制内容,IP层的控制功能是最复杂的,主要负责差错控制、拥塞控制等,任何控制都是建立在信息的基础之上的,在基于IP数据报的网络体系中,网关必须自己处理数据报的传输工作,
2013-09-22 00:59:20 1039
原创 约瑟夫环的两种实现
方法一:用一个数组存放每个元素,再用一个bool数组存放每个元素是否还在那个队列中。每次出列一个元素,将其对应的那个bool值置为false。循环输出第m个元素直到只剩下一个元素在队列中。不过这个时间复杂度比较高。 #includeusing namespace std;//时间复杂度高的方法#define MAX_LENGTH 50int data[MAX_LENGTH]
2013-09-17 02:56:50 1464
原创 发篇文章纪念我死去的第一个机试---重庆地区华为机试
虽然很不想回忆昨天的机试,满怀信心的去,满载失望和遗憾的回。栽在不应该出现的问题上。。细节决定成败啊!!!!今天我终于鼓起勇气做做昨天的题。受第一题的影响,我直接放弃后面的题目,只看了看题目。题目二:输入:整数 空格 整数 整数的范围小于128位(我就理解成:比如4444有4位) 输出:整数#include#include
2013-09-15 20:29:50 1667
原创 树的递归遍历和非递归遍历(前序和后序)
/********************************************树的递归遍历和非递归遍历********************************************/#include#includeusing namespace std;struct Node{ Node(int v=0,Node* l=NULL,Node* r=NUL
2013-09-11 20:35:21 1076
转载 windows消息机制
一 Windows中有一个系统消息队列,对于每一个正在执行的Windows应用程序,系统为其建立一个“消息队列”,即应用程序队列,用来存放该程序可能创建的各种窗口的消息。应用程序中含有一段称作“消息循环”的代码,用来从消息队列中检索这些消息并把它们分发到相应的窗口函数中。二 Windows为当前执行的每个Windows程序维护一个「消息队列」。在发生输入事件之后,Windows将事
2013-09-11 17:20:17 803
转载 windows内存分配总结
HeapAlloc VirtualAlloc GlobalAlloc LocalAlloc new malloc区别1. HeapAlloc:MSDN上的解释为:HeapALloc是从堆上分配一块内存,且分配的内存是不可移动的(即如果没有连续的空间能满足分配的大小,程序不能将其他零散的空间利用起来,从而导致分配失败),该分配方法是从一指定地址开始分配,而不像GloabalAlloc是从全局
2013-09-11 13:07:13 3009
转载 Windows socket-重叠模型
Windows socket-重叠模型重叠I/O一. 重叠模型的优点1. 可以运行在支持Winsock2的所有Windows平台 ,而不像完成端口只是支持NT系统。2. 比起阻塞、select、WSAAsyncSelect以及WSAEventSelect等模型,重叠I/O(Overlapped I/O)模型使应用程序能达到更佳的系统性能。
2013-09-10 22:16:56 833
原创 C++编译链接那些事
最近一直在研究编译链接,所以写篇文章总结一下。先来了解几个概念吧:要明白的几个概念: 1、编译:编译器对源文件进行编译,就是把源文件中的文本形式存在的源代码翻译成机器语言形式的目标文件的过程,在这个过程中,编译器会进行一系列的语法检查。如果编译通过,就会把对应的CPP转换成OBJ文件(其实编译好像只是生成一个中间文件,再由汇编器生成obj文件)。 2、编
2013-09-09 14:42:06 1504
原创 windows socket----select模型
一般我们的网络编程都是用bind ,listen,accept,send/sendto,recv/recvfrom。在创建套接字的时候,是默认使用阻塞模式的,每当我们调用send/sendto等方法时,套接字都会进入阻塞状态,等到条件满足后才返回。当然为每个连接创建线程是个解决这个问题的好办法。如:比较容易想到的一种服务器模型就是采用一个主线程,负责监听客户端的连接请求,当接收到某个客户端的连接请
2013-09-08 23:13:51 1254
原创 统计字符串中出现最多的单词和次多的单词
题目:统计字符串中出现最多的单词和次多的单词。测试用例:"This This This a dog,not a cat!" 输出:This 3次 a 2次思路:先把这个字符串分词,放入一个数组中。然后记录每个词出现的次数。先找出最多的那个词,然后将其次数置0,在找最多的那个词(原来次多的词)。#includeusing namespace std;#define MAX_
2013-09-08 23:13:12 3333
转载 WSAAsyncSelect模型
Winsock提供了一个有用的异步I/O模型。利用这个模型,应用程序可在一个套接字上,接收以Windows消息为基础的网络事件通知。具体的做法是在建好一个套接字后,调用WSAAsyncSelect函数。该模型最早出现于Winsock的1.1版本中,用于帮助应用程序开发者面向一些早期的16位Windows平台(如Windows for Workgroups),适应其“落后”的多任务消息环境。应用
2013-09-08 22:43:24 818
转载 C++基础之-------_stdcall,_cdecl区别
在看代码的时候遇到很多_stdcall修饰的函数,不明所以,查了些资料,记录如下:(1) _stdcall调用 _stdcall是Pascal程序的缺省调用方式,参数采用从右到左的压栈方式,被调函数自身在返回前清空堆栈。 WIN32 Api都采用_stdcall调用方式,这样的宏定义说明了问题: #define WINAPI _stdcall 按C编译方式,
2013-09-08 01:20:00 986
转载 Socket的阻塞模式和非阻塞模式
阻塞模式 Windows套接字在阻塞和非阻塞两种模式下执行I/O操作。在阻塞模式下,在I/O操作完成前,执行的操作函数一直等候而不会立即返回,该函数所在的线程会阻塞在这里。相反,在非阻塞模式下,套接字函数会立即返回,而不管I/O是否完成,该函数所在的线程会继续运行。在阻塞模式的套接字上,调用任何一个Windows Sockets API都会耗费不确定的等待时间。图所示,在调用recv()
2013-09-07 23:36:18 1741
转载 C++基础之--------虚拟继承的类对象的空间大小
print?// 含有虚拟继承对象的空间大小.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include using namespace std; class A{ public: protected: private: }; class B{ public: protected: priva
2013-09-07 14:03:54 950
转载 C++基础--------带默认参数的虚函数 静态类型和动态类型分析
// 字串查找.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include using namespace std; class base{ public: base(){ cout"base::base()\n"; } ~base(){ cout"base
2013-09-06 01:07:34 991
原创 C++基础之---union联合体大小分析
#include using namespace std;union un{ int a[7]; double b; char c[10]; int d[3];};void main(){ cout<<sizeof(un)<<endl;}输出为32。union(共用体)的各个成员是以同一个地址开始存放的,每一个时刻只可以存储一个成员,这样就要求它在分配内存单元时候要
2013-09-06 00:13:35 3430
转载 vector的大小sizeof(vector<T>)
#include #include using namespace std; struct Node { int id; vector score; }; void DisplayVector(vector &v) { cout<
2013-09-05 22:08:24 2550
转载 static_cast、dynamic_cast reinterpret_cast和const_ cast
关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++ 的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。下面对它们一一进行介绍。stat
2013-09-05 12:54:40 684
原创 找出字符串的组合
比如:“abc”字符串的组合为:a,b,c,ab,ac,bc,abc。这里我用两种方法实现:位操作:#include#includeusing namespace std;//位操作算法void main(){ char* data="abcd"; int length=strlen(data); int last=(1<<length)-1; cout<<last
2013-09-05 00:29:36 1434
转载 STL中mem_fun和mem_fun_ref的用法
怎么对容器中的所有对象都进行同一个操作?我们可能首先想到的是用循环来实现。比如有如下的一个类:class ClxECS{public: int DoSomething() { cout return 0; };};现在定义如下一个vector:vector vECS;for(int i = 0; i
2013-09-05 00:20:51 836
原创 拓扑排序---(图的领接表实现)
#includeusing namespace std;#define MAX_NODE 30#define MAX_INFO 10bool isOutput[MAX_NODE]; //记录该节点有没有输出struct ListNode{ ListNode(){next=NULL;} int position; ListNode* next; };stru
2013-09-05 00:18:42 2170
转载 C++中的显式构造函数
有如下一个简单的复数类:class ClxComplex{public: ClxComplex(double dReal = 0.0, double dImage = 0.0) { m_dReal = dReal; dImage = dImage; } double GetReal() const { return m_dReal; } doubl
2013-09-04 03:15:11 755
转载 虚函数与private
我们把一个仅仅含有纯虚函数的类称为接口,我们也好像已经习惯了将这个接口中的所有纯虚函数全声明为public,而且按照这样的设计,一切都工作得不错。比如COM正是这样做的,它的接口中几乎不会存在private的纯虚函数。那么,让我们想一想,纯虚函数或者虚函数可以为private吗?如果这种方式是可行的,那么什么时候可以将(纯)虚函数设为private了?这些都是本文将要讨论的主题。一起来看看。一
2013-09-04 02:05:37 752
原创 数据结构之图详解
图的建立:大家都知道一般创建图可以用两种存储结构:邻接矩阵和邻接表。这里我们采取邻接矩阵的方法。。这两种具体的结构在这里不介绍了。struct MyGraphic{ int vertex,edge; //顶点和边 int Matrix[MAX_VERTEX][MAX_VERTEX]; //临接矩阵 };这就是我做的创建图基本的结构,包括:点数(vertex),边数(edge)
2013-09-03 19:43:02 3023 1
原创 带环单链表的问题
因为上一篇文章对这个问题讲解的很详细,这里只给个代码展示:(找出带环单链表的环的第一个节点)#includeusing namespace std;int length;struct Node{ int value; Node* next;};Node* meetCicleNode=NULL; //快节点和慢节点的相遇节点Node* firstCileNode=NUL
2013-09-02 23:44:16 1421
转载 判断单链表是否有环 并找出第一个相交的节点
2、给出一个单向链表的头指针pHead,判断链表中是否有环。示意图如下:链表中有环,其实也就是自相交。我们用两个指针pslow和pfast从头开始遍历链表,pslow每次前进一个节点,pfast每次前进两个结点,若存在环,则pslow和pfast肯定会在环中相遇,若不存在,则pslow和pfast能正常到达最后一个节点(实际上是到达NULL)。 3、给出两个单向链表的头指针pH
2013-09-02 23:07:03 3333
原创 全排列
#includeusing namespace std;int data[4]={1,2,3,4};int length=4;void swap(int* data,int first,int second){ int temp=data[first]; data[first]=data[second]; data[second]=temp;}void Permutate(
2013-09-02 20:43:39 879
转载 空指针、NULL指针、零指针
1. 空指针、NULL指针、零指针1.1什么是空指针常量0、0L、'\0'、3 - 3、0 * 17 (它们都是“integer constant expression”)以及 (void*)0 (我觉得(void*)0应该算是一个空指针吧,更恰当一点)等都是空指针常量(注意 (char*) 0 不叫空指针常量,只是一个空指针值)。至于系统选取哪种形式作为空指针常量使用,则是实现相关的。一
2013-09-02 14:39:20 6780 2
原创 堆的建立,插入和自动排序
在网上看的代码基本上都是这样的:#includeusing namespace std;void MakeHeap (int a[], int n);intmain (){ int a[100]; int n, i; cout << "Enter the number:" << endl; cin >> n; for (i = 1; i <= n; i++
2013-09-02 14:12:22 1264
深入理解计算机系统
2013-09-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人