cc++算法基础
failwest9527
这个作者很懒,什么都没留下…
展开
-
插入排序
version one:void InsertSort(int *list,int sum){ // int guard = list[0];int temp,j;for (int i = 1;i { temp = list[i]; for (j = i-1;j >= 0;--j)if (temp {list[原创 2013-09-11 21:18:28 · 677 阅读 · 0 评论 -
详细解说 STL 排序(Sort)
0 前言: STL,为什么你必须掌握对于程序员来说,数据结构是必修的一门课。从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来。幸运的是这些理论都已经比较成熟,算法也基本固定下来,不需要你再去花费心思去考虑其算法原理,也不用再去验证其准确性。不过,等你开始应用计算机语言来工作的时候,你会发现,面对不同的需求你需要一次又一次去用代码重复实现这些已经转载 2013-09-19 13:08:58 · 828 阅读 · 0 评论 -
WINDOW进程通信的几种方式
WINDOW进程通信的几种方式1 文件映射 文件映射(Memory-Mapped Files)能使进程把文件内容当作进程地址区间一块内存那样来对待。因此,进程不必使用文件I/O操作,只需简单的指针操作就可读取和修改文件的内容。 Win32 API允许多个进程访问同一文件映射对象,各个进程在它自己的地址空间里接收内存的指针。通过使用这些指针,不同进程就可以读或修改文件转载 2013-09-21 14:27:15 · 864 阅读 · 0 评论 -
链表相交问题
1 判断两个链表是否相交(假设两个链表均不带环)有四种方法:解法1:直观的想法判断第一个链表的每个节点是否在第二个链表中,这种方法的时间复杂度为O(length(h1)*length(h2))解法2:利用计数的方法对第一个链表的节点地址进行hash排序,建立hash表,然后针对第二个链表的每个节点的地址查询hash表,如果它在hash表中出现,那么说明两个链表有共同的节点。转载 2013-09-21 15:37:58 · 713 阅读 · 0 评论 -
链表相交问题
1、如何判断一个单链表有环2、如何判断一个环的入口点在哪里3、如何知道环的长度4、如何知道两个单链表(无环)是否相交5、如果两个单链表(无环)相交,如何知道它们相交的第一个节点是什么?6、如何知道两个单链表(有环)是否相交7、如果两个单链表(有环)相交,如何知道它们相交的第一个节点是什么? 以下进行分析,并在最后附源代码及测试:1转载 2013-09-21 15:40:12 · 776 阅读 · 0 评论 -
从1异或到N
#include using namespace std;unsigned xor_n(unsigned n){ unsigned t = n & 3; if (t & 1) return t / 2u ^ 1; return t / 2u ^ n; }int main(int argc, char* argv[]){ const int N = 12;原创 2013-10-07 09:26:26 · 4011 阅读 · 0 评论 -
指针与引用的区别,指针与引用的底层实现是否一样?
原文链接:http://blog.csdn.net/lingfengtengfei/article/details/12345437指针与引用,在More Effective C++ 的条款一有详细讲述,条款一:指针与引用的区别 指针与引用看上去完全不同(指针用操作符’*’和’->’,引用使用操作符’.’),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如转载 2013-10-07 16:23:21 · 788 阅读 · 0 评论 -
Windows线程创建、退出及资源释放
原文链接:http://blog.csdn.net/xwdpepsi/article/details/12375577可以通过以下几种方法创建一个线程:1、CreateThread2、_beginthread3、_beginthreadex4、AfxBeginThread--------------------------------------------------转载 2013-10-08 17:00:48 · 1387 阅读 · 0 评论 -
一个fork的面试题
转自陈皓老师博客:http://coolshell.cn/articles/7965.html前两天有人问了个关于Unix的fork()系统调用的面试题,这个题正好是我大约十年前找工作时某公司问我的一个题,我觉得比较有趣,写篇文章与大家分享一下。这个题是这样的:题目:请问下面的程序一共输出多少个“-”?1234转载 2013-09-25 11:37:09 · 727 阅读 · 0 评论 -
哈希表及处理冲突的方法
哈希法又称散列法、杂凑法以及关键字地址计算法等,相应的表称为哈希表。这种方法的基本思想是:首先在元素的关键字k和元素的存储位置p之间建立一个对应关系f,使得p=f(k),f称为哈希函数。创建哈希表时,把关键字为k的元素直接存入地址为f(k)的单元;以后当查找关键字为k的元素时,再利用哈希函数计算出该元素的存储位置p=f(k),从而达到按关键字直接存取元素的目的。 当关键字集合很大时,关转载 2013-09-26 10:26:48 · 887 阅读 · 0 评论 -
MySQL的btree索引和hash索引的区别
Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引。可能很多人又有疑问了,既然 Hash 索引的效率要比 B-Tree 高很多,为什么大家不都用 Hash 索引而还要使用 B-Tree 索引呢?任何事物都是有两面性的,Ha转载 2013-09-26 10:28:31 · 1352 阅读 · 0 评论 -
进程、线程与多线程
1.进程和线程有什么区别?总结起来,就是一下的几个区别: a.进程是资源分配的基本单位,线程是cpu调度,或者说是程序执行的最小单位。在Mac、Windows NT等采用微内核结构的操作系统中,进程的功能发生了变化:它只是资源分配的单位,而不再是调度运行的单位。在微内核系统中,真正调度运行的基本单位是线程。因此,实现并发功能的单位是线程。 b.进程有独立的地址空转载 2013-09-27 14:13:34 · 1459 阅读 · 0 评论 -
Windows消息机制要点
1. 窗口过程 每个窗口会有一个称为窗口过程的回调函数(WndProc),它带有四个参数,分别为:窗口句柄(Window Handle),消息ID(Message ID),和两个消息参数(wParam, lParam),当窗口收到消息时系统就会调用此窗口过程来处理消息。(所以叫回调函数)2 消息类型 1) 系统定义消息(System-Defined Messages) 在S转载 2013-09-19 12:55:55 · 804 阅读 · 0 评论 -
堆排序
堆定义n个关键字序列Kl,K2,…,Kn称为(Heap),当且仅当该序列满足如下性质(简称为堆性质):(1)ki=号。//k(i)相当于二叉树的非叶结点,K(2i)则是左孩子,k(2i+1)是右孩子若将此序列所存储的向量R[1..n]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树: 树中任一非叶结点的关键字均不大于转载 2013-09-19 09:55:55 · 821 阅读 · 0 评论 -
C++ 异常 与 ”为什么析构函数不能抛出异常“ 问题
C++ 用异常使得可以将正常执行代码和出错处理区别开来。 比如一个栈,其为空时,调用其一个pop 函数,接下来怎么办? 栈本身并不知道该如何处理,需要通知给其调用者(caller),因为只有调用者清楚接下来该怎么做。 异常,就提供了一个很好机制。 但是异常需要操作系统,编译器,RTTI的特性支持。下面围绕一个问题 “为什么析构函数不能抛出异常?” 展开C++中异常的实现。Effec转载 2013-09-30 09:48:44 · 924 阅读 · 0 评论 -
让程序跳转到某绝对地址执行
先看如下程序:#include using namespace std;void fun(){cout}int main(){ typedef void(*func)(void); func Fun = fun; (*fun)();//1 (*((void (*)( ))Fun )) ( );//2 return 0;原创 2013-10-03 19:28:34 · 4373 阅读 · 0 评论 -
四人过桥问题
有一天晚上,有四个人需要通过架在山谷间的危桥,任意时刻最多只能有两个人在桥上,过桥需要一盏闪光灯,这些人只有一盏闪光灯。如果单独过桥他们分别需要10、5、2、1分钟,如果两人同时过桥则所需时间是较慢者所需的时间。18分钟后,沿山谷滚滚而下的山洪将把这座桥冲毁。这四个人能及时过桥吗?转载 2013-09-18 19:40:00 · 1457 阅读 · 0 评论 -
深入解析SendMessage、PostMessage
本文将使用C++语言,在MFC框架的配合下给出PostMessage、SendMessage等的使用方式与使用不当造成的后果(讨论均针对自定义的消息进行)。如有什么错误,欢迎指正。 写过Windows程序的同学都知道PostMessage、SendMessage的区别,PostMessage函数调用发送之后,立即返回,不等待消息处理完成。而SendMessage则让调用的线程处于阻塞(BL转载 2013-09-19 07:37:25 · 971 阅读 · 0 评论 -
桶排序
转载:http://hxraid.iteye.com/blog/647759从《基于比较的排序结构总结 》中我们知道:全依赖“比较”操作的排序算法时间复杂度的一个下界O(N*logN)。但确实存在更快的算法。这些算法并不是不用“比较”操作,也不是想办法将比较操作的次数减少到 logN。而是利用对待排数据的某些限定性假设 ,来避免绝大多数的“比较”操作。桶排序就是这样的原理。转载 2013-09-19 08:28:38 · 668 阅读 · 0 评论 -
动态规划算法之:最长公共子序列 & 最长公共子串(LCS)
1、先科普下最长公共子序列 & 最长公共子串的区别:找两个字符串的最长公共子串,这个子串要求在原字符串中是连续的。而最长公共子序列则并不要求连续。2、最长公共子串其实这是一个序贯决策问题,可以用动态规划来求解。我们采用一个二维矩阵来记录中间的结果。这个二维矩阵怎么构造呢?直接举个例子吧:"bab"和"caba"(当然我们现在一眼就可以看出来最长公共子串是"b转载 2013-09-19 20:46:15 · 1350 阅读 · 0 评论 -
__FILE__,__LINE__,__DATE__,__TIME__,__FUNCTION__
c++ 有四个常用的预定义名字,分别为 :__FILE__,__LINE__,__DATE__,__TIME____FILE__: 记录文件的路径加名称__LINE__: 记录文件已经被编译的行数__DATE__: 记录文件的编译日期__TIME__: 记录文件的编译时间__FUNCTION __:当前所在函数名可以当作变量直接使用 , 一般用作程序调试例子 :转载 2013-09-19 13:07:24 · 928 阅读 · 0 评论 -
最长公共子序列求解:递归与动态规划方法
在做OJ题目的时候,经常会用到字符串的处理。例如,比较二个字符串相似度。这篇文章介绍一下求两个字符串的最长公共子序列。 一个字符串的子序列,是指从该字符串中去掉任意多个字符后剩下的字符在不改变顺序的情况下组成的新字符串。 最长公共子序列,是指多个字符串可具有的长度最大的公共的子序列。 (1)递归方法求最长公共子序列的长度 1)设有字符串a[0...n],转载 2013-09-19 20:49:19 · 1044 阅读 · 0 评论 -
判断两个单向链表是否相交
链接:http://www.cnblogs.com/mengdd/archive/2013/03/14/2958642.html题目来源 《编程之美》3.6节。 给出两个单向链表的头指针,判断这两个链表是否相交。假设两个链表都不带环。 分析 这个题目需要得出的结论是两个链表是否相交,即返回值应当是一个布尔值。 因为如果出现两个链表转载 2013-09-18 19:06:14 · 1358 阅读 · 0 评论 -
vector中的erase方法跟algorithm的remove
vector中erase是真正删除了元素, 迭代器访问不到了。 algorithm中的remove只是简单的把要remove的元素移到了容器最后面,迭代器还是可以访问到的。因为algorithm通过迭代器操作,不知道容器的内部结构,所以无法做到真正删除。vector array;array.erase(remove(array.begin(),array.end(),6),arra转载 2013-09-18 19:20:50 · 874 阅读 · 0 评论 -
STL中遍历容器it++与++it的区别
两种方式iterator遍历的次数是相同的,但在STL中效率不同,前++--返回引用,后++--返回一个临时对象,因为iterator是类模板,使用it++这种形式要返回一个无用的临时对象,而it++是函数重载,所以编译器无法对其进行优化,所以每遍历一个元素,你就创建并销毁了一个无用的临时对象。转载 2013-09-19 06:51:42 · 1485 阅读 · 0 评论 -
利用位图bitmap删除字符串中重复的字母
思想:每个二进制位代表一个字母是否出现。共有8个int类型,即8*4*8=256个二进制位。 每次置位需要定位某二进制位属于哪个int位:bitmap[c/32] ,然后确定在int中的偏移1 需要仔细理解,可单步调试理解之。#include #include #include int main(){ int i; char *source = "aaabbccd转载 2013-09-27 20:07:03 · 993 阅读 · 0 评论