自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

顺心意

----------------------------------------------------------------------------------------成长中的菜鸟

  • 博客(21)
  • 资源 (9)
  • 收藏
  • 关注

转载 01背包问题

参考自:http://hi.baidu.com/acmgood/blog/item/53ca7237aaab32d5a3cc2bb4.html 题目 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。基本思路 这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品放入一

2015-07-30 16:04:53 667

原创 二叉树的非递归遍历

#include <iostream>#include <stack>using namespace std;typedef struct node{ int data ; //节点信息 struct node * leftChild ; //左孩子 struct node * rightChild ; //右孩子}BiTreeNo

2015-07-30 15:16:19 453

原创 Trie树、字典树

列表内容 我们来看看Trie树的特点:根节点为空值,剩下每一个节点保存一个字母。 如果从根节点遍历到某一个节点把路径节点的值连在一起就构成了一个字符串,利用这个特点很容易想到这棵树的第一个功能能帮我们查找某一个单词是否在树中(需要在每一个节点设置一个标志,表示从根节点到此节点是否存在一个单词);如果该单词存在,我们可以利用它实现第二个功能:去除重复单词;同样如果该词存,在我们还可以看

2015-07-30 11:57:29 402

原创 算法复习之基数排序

LSD:从低位排序逐步至高位排序,此处的低位指的是从个位->十位->百位…. 代码如下://获取数据d位的值int getDigit(int x,int d){ int value = 1 ; for(int i = 0 ;i <d-1;++i) value *= 10 ; return (x/value)%10;}//LSD 算法void lsd

2015-07-20 09:39:15 466

转载 使用两个栈实现堆

扩展:用两个队列实现一个栈?思路: 1.有两个队列q1和q2,先往q1内插入a,b,c,这做的都是栈的push操作。 2.现在要做pop操作,即要得到c,这时可以将q1中的a,b两个元素全部dequeue并存入q2中,这时q2中元素为a,b,对q1再做一次dequeue操作即可得到c。 3.如果继续做push操作,比如插入d,f,则把d,f插入到q2中, 4.此时若要做po

2015-07-10 17:56:02 1352

转载 判断链表中是否有环存在

思路: 用两个指针,pSlow,pFast,就是一个慢一个快 慢的一次跳一步, 快的一次跳两步, 什么时候快的追上慢的了就表示有环(pSlow == pFast )。 实现如下:struct listtype{ int data; struct listtype * next;}list;int find_cicle(list *head){ list *

2015-07-10 17:34:45 458

转载 逆序输出问题

一,题目 输入一个链表的头结点,从尾到头反过来输出每个结点的值。链表结点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;};二,分析解法一:把链表中链接结点的指针反转过来,改变链表的方向。然后就可以从头到尾输出了。参考 解法二:从头到尾遍历链表,每经过一个结点的时候,把该结点放到一个栈

2015-07-10 17:09:52 604

转载 删除单链表节点O(1)

一,题目给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下:struct ListNode{int m_nKey;ListNode* m_pNext;};函数的声明如下: void DeleteNode(ListNode* pListHead, ListNode* pToBeDeleted); 二,分析 这是一道广为流传的Google面

2015-07-10 16:27:39 2838

原创 算法复习之两路归并排序

两路归并排序最差时间复杂度:O(nlogn) 平均时间复杂度:O(nlogn) 最差空间复杂度:O(n) 稳定性:稳定两路归并排序(Merge Sort),也就是我们常说的归并排序,也叫合并排序。它是建立在归并操作上的一种有效的排序算法,归并操作即将两个已经排序的序列合并成一个序列的操作。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 归并操作的基本步骤如下

2015-07-09 16:32:02 1912

原创 算法复习之堆排序

/**将两个元素进行交换*params *p ,*q待交换的两个元素的指针*/void swap(int *p,int *q){ int temp ; temp = *p ; *p = *q ; *q = temp ;}/**堆向下调整*list:堆的数组,hole:待调整的数据,len:待调整的堆的大小*/void HeapAdjust(int

2015-07-09 14:44:11 344

原创 算法复习之二分查找

#include<iostream>/**有序数组的二分法查询*list:有序的数组,len:数组的长度,key:查询的关键值*@return* -1:表示查询失败,其他数字:表示查询成功*/int binarySearch(int* list,int len ,int key){ int low = 0,high =len-1;//数组的两个“游标” int mid

2015-07-09 11:00:21 363

原创 算法复习之希尔排序

#include<iostream>void prin(int* list,int len){ for(int i = 0 ;i<len ;++len) std::cout<<list[i]<<" " <<std::endl;}/**希尔排序*list:待排序的数组,len:待排序数组的长度*时间复杂度:O(nlgn)* 希尔排序是按照不同步长对元素进行插

2015-07-09 10:18:51 365

原创 算法复习之插入排序

#include<iostream>void prin(int *list,int len){ for(int i= 0;i<len;++i) std::cout<<list[i]<<" "<<std::endl;}/************************************************************************//*

2015-07-08 22:55:52 374

原创 算法复习之选择排序

#include <iostream>//打印输出void prin(int *list ,int len ){ for(int i = 0 ;i<len;++i) std::cout<<list[i]<<" "<<std::endl;}/**选择排序*list : 待排序的数组,len:待排序数组的长度*时间复杂度:n^2,空间复杂度 O(1)*/voi

2015-07-08 21:52:21 312

原创 算法复习之快速排序

#include<iostream>int partition_1(int *list,int low,int high) { int privot = list[low] ;//分割点 while(low < high) { while( low < high && list[high] >= privot)//从high处寻找小于privot的值

2015-07-08 21:29:56 343

原创 算法复习之冒泡排序

#include <iostream>//打印输出void prin(int *list ,int len ){ for(int i = 0 ;i<len;++i) std::cout<<list[i]<<" "<<std::endl;}/**冒泡排序*list 数组,len数组的长度*/void bubbleSort(int *list,int len)

2015-07-08 21:07:05 401

原创 堆栈的理论知识

堆和栈的理论知识 1.申请方式栈:由系统自动分配和回收。 例如,声明在函数中的一个局部变量int b,系统自动在栈中为b开辟空间。堆:需要程序员自己申请,并指明大小,在C语言中用malloc等函数申请。 例如:p1 = (char*)malloc(10*sizeof(char)) ; 在C++中使用new运算符进行,但是注意p1,p2本身是在栈中的。

2015-07-08 14:16:25 522

原创 树的前序,中序,后序推理问题

某二叉树中序序列为ABCDEFG,后序序列为BDCAFGE,则前序序列是?1.由后序可知,E是整个二叉树的根。然后在中序里划分: ~~~~~~~E ~~~~~~/~\ ~ (BDCA) (FG) 2.由后序可知,A是左子树的根,然后在中序里ABCD判断A没有左子树: ~~~~~~E ~~~~~/~\ ~~~~A (FG) ~~~~~\ ~~~~(BD

2015-07-08 12:02:26 616

转载 Nagel算法

Nagel算法TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认。为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据。(一个连接会设置MSS参数,因此,TCP/IP希望每次都能够以MSS尺寸的数据块来发送数据)。Nagle算法就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块。Nagle算法的基本定义是任意时刻,最多只

2015-07-04 11:20:48 498

原创 TCP/IP三次握手和四次挥手

1、建立连接协议(三次握手)(1)客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1。(2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志。因此它表示对刚才客户端SYN报文的回应;同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯。(3) 客户必须再次回应服务段一个ACK报文,这是报文段3。2、连接终止协议(四次挥手)

2015-07-03 16:05:45 374

转载 私有继承

私有继承的 第一个规则:和公有继承相反,如果两个类之间的继承关系为私有,编译器一般不会将派生类对象转换成基类对象。 第二个规则: 从私有基类继承而来的成员都成为了派生类的私有成员,即使它们在基类中是保护或公有成员。私有继承的含义:私有继承意味着 “用…来实现”。 如果使类D私有继承于类B,这样做是因为你想利用类B中已经存在的某些代码,而不是因为类型B的对象和类型D的对象之间有什么概念上的关系。

2015-07-02 21:04:25 448

啊哈!算法

相当经典的算法描述,详细的图解说明,值得一观。

2015-01-21

C++象棋源码

象棋源码,提供给大家参考,学习,简单易懂

2014-11-16

C语言排序算法

C语言的排序算法,易懂,适合初学者探索算法的奥秘

2014-11-16

深度探索C++对象模型

深度探索C++对象模型

2014-11-11

TCP/IP卷一

TCP/IP卷1,熟悉TCP/IP协议

2014-11-11

空空如也

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

TA关注的人

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