- 博客(28)
- 收藏
- 关注

原创 单链表的基本操作(一)
单链表在插入、删除时较为方便,平时做题或者面试也会遇到很多,下面对单链表的操作做一些介绍。本文参考了一些blog,不过只记得下面这个啦:http://blog.csdn.net/puqutogether/article/details/39990419定义一个结构体:struct Node{ int data; Node* next;};在 运算前先定义一个全局
2014-10-28 21:54:18
697
原创 K SUM问题
1. Two Sum题目:Given an array of integers, find two numbers such that they add up to a specific target number.The function twoSum should return indices of the two numbers such that they add up
2015-05-12 14:22:06
591
原创 排序算法之冒泡排序
基本思想:冒泡排序是通过交换两个元素实现的,其思想是:第一趟将待排序序列(A[0]~A[n-1])从前往后,两两相邻元素进行比较,若后者小,则交换,比较n-1次;第一趟结束后,最大元素被交换到A[n-1]处(即沉底),下一趟排序只需要在(A[0]~A[n-2])中进行;若在某趟排序中,未交换元素,说明子序列已经有序,则不在进行下一趟排序。该方法最多进行n-1趟。冒泡排序
2015-05-05 17:41:34
767
原创 排序算法之堆排序
基本思想:基本思想主要就是两点:构建初始化堆和排序。以构建最大堆为例,可以分为以下几个步骤:1、将初始待排序序列(R0,R1,R2....Rn-1)构建成最大堆,此堆为初始的无序堆。2、将堆顶元素R0与最后一个元素Rn-1交换,此时得到一个新的无序序列(R0,R1,R2....Rn-2)和新的有序序列Rn-1,且满足R[0,2...n-2]3、由于交换后新的堆顶R0可能违反最大
2015-05-05 15:53:02
641
原创 排序算法之简单选择排序
基本思想:将初始序列(A[0]~A[n-1])作为待排序序列,第一趟在待排序序列(A[0]~A[n-1])中找最小值元素,与该序列中第一个元素A[0]交换,这样子序列(A[0])有序;下一趟排序在待排序子序列(A[1]~A[n-1])中进行。第 i 趟排序,A[i-1]~A[n-1] 中,找到最小元素,与该子序列中第一个元素 A[i-1] 交换。经过n-1趟排序后使得初始序列有序。
2015-05-05 15:29:38
704
原创 排序算法之直接插入排序
基本思想:直接插入排序的思想非常简单,将序列中第一个元素作为一个有序序列,然后将剩下n-1个元素按关键字大小依次插入该有序序列,每插入一个元素后依然保持该序列有序,经过n-1趟排序后即成为有序序列。直接插入排序示例:由图可以看到,括号里面的都是有续表,而货号后面的灰色关键字是下一个将要插入的元素。代码:void InsertSort(int A[],in
2015-04-26 22:11:55
706
转载 Struct和Class的区别
转载来源:http://blog.csdn.net/yuliu0552/article/details/6717915C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能。struct能包含成员函数吗? 能!struct能继承吗? 能!!struct能实现多态吗? 能!!! 既然这些它都能实现,那它
2015-04-20 10:40:20
386
转载 C程序编译过程浅析
转自:http://blog.csdn.net/koudaidai/article/details/8092647以GCC编译hellworld为例,简单总结如下。hello.c源代码如下:#include int main() { printf(“Hello, world.\n”); return 0; } 通常我们使用g
2015-04-13 15:16:02
375
原创 C++中重载(overload)、重写(override,也叫做“覆盖”)和重定义(redefine)的区别?
1)重载(overload):指函数名相同,但是它的参数表列个数或顺序,类型不同。但是不能靠返回类型来判断。 a 相同的范围(在同一个类中) b 函数名字相同、 参数不同 c virtual关键字可有可无 d 返回值可以不同;2) 重写(覆盖override)是指派生类函数覆盖基类函数,特征是: a 不同的范围,分别位于基类和派生类中 b 函
2015-04-12 21:52:19
1875
原创 字符串:最长回文子串
最长回文子串回文子串:即正着看和倒着看相同的子串,如:abcba、yyxyy。由于此类题目为面试笔试常考题目,所以现在就来整理一下啦。1、暴力求解法最直接的想法就是暴力求解,但是我们可以看到下面的代码时间复杂度是O(N^3)。string findLongestString(string str)//暴力求解算法{ int i,j; int len = str.l
2015-04-09 17:40:48
447
原创 C++内存存储区域的划分
C++内存存储区域划分面试笔试常考 内存中对数据的存储不是杂乱无章的,而是有相应的划分,根据数据类型分门别类安放到相应的位置。 存储的区域由最高存储地址到最低存储地址依次为:命令行参数区:命令行参数和环境变量;栈区(stack):指那些由编译器需要的时候分配,在不需要的时候自动清除的变量的存储区域。里面的变量通常是函数的参数值、局部变量等值,其操作方式类似于数据
2015-04-08 21:23:54
671
原创 C/C++中关于struct和union的内存对齐原则
在sizeof计算一个结构体的大小时,经常得到的值比结构体内部成员所占内存总和要大,这就是因为在结构体内部,成员在存储时有对齐的规则。 对齐原则一般满足以下几点:1.结构体第一个数据成员放在offset为0的地方,后面每个成员相对于结构体首地址的偏移量(offset)都是成员大小(该变量类型所占字节)的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding)
2015-03-23 10:08:09
986
原创 数据结构之链表题目汇总
链表是常用也是面试笔试用较为常考的题目,下面整理了链表的基本操作以及常考题目,希望以后会有所帮助。感谢一些博主的解析,他们的解答给我很大帮助。1.单链表的操作单链表的基本操作http://blog.csdn.net/happywq2009/article/details/40558067单链表的常用操作http://blog.csdn.net/happywq2009
2015-03-17 13:46:18
593
1
原创 环形链表相关题目解析
环形链表也是近年来面试笔试中常考问题,于是就在网上整理了相关的题目与解析。1.判断一个链表是不是环形链表思路:这里给定两个指针,fast和slow。两个指针同时从头结点开始出发,fast指针走两步,slow指针走一步;若链表有环,这两个指针肯定会在某点相遇;若链表无环,fast会直接先到达NULL。代码:bool Iscircle(Node *head)//判断是否有环{
2015-03-16 21:05:09
1717
1
原创 单链表的常用操作(二)
接上一篇单链表的基本操作,我又整理了一些链表常考的题目,并且不断更新中。。。 1.查找链表中倒数第k个节点以及删除倒数第k个节点//给两个指针p和q,让其中一个指针p领先q指针k步,//然后再同时移动p和q指针,当领先的指针p先到达链表尾部时,后面的指针q所指向的节点恰好为倒数第k个节点。Node* GetKthNode(int k){ Node *p=head; Node
2015-03-15 17:13:44
676
1
原创 字符串:查找字符串中首个出现一次的字符
题目:在一个字符串中找到第一个只出现一次的字符。如输入 abaccdeff,则输出 b。思路:我们可以依次遍历求出每个字符的次数,即每求一个字符的次数,就遍历一次字符串。但是这样时间复杂度为O(n*n)。这样考虑,每个字符对应一个ASCII值,我们可以设定一个数组长度为256,每一个字符的ASCII码值即数组的index值。遇到相同的就加一。最后遍历一次求第一个出现一次的字
2015-03-11 21:36:48
965
1
原创 字符串:翻转句子中单词的顺序
题目: 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。 句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。 例如输入“I am a student.”,则输出“student. a am I”。思路: 翻转单词的题目和字符串的左移,其本质上是一个意思,都是基于字符串的翻转。例如:把字符串“abcde”左移成为”deabc”。那么我们可以分成三步字符串翻
2015-03-11 19:28:24
492
原创 数据结构之栈和队列题目汇总
1.栈的应用:应用一:括号匹配http://blog.csdn.net/happywq2009/article/details/441818932.两个栈实现队列+两个队列实现栈----C++http://blog.csdn.net/happywq2009/article/details/441813833.设计包含min或max功能的栈http://blog.cs
2015-03-11 13:08:13
924
1
原创 栈的应用——Simplify Path
题目:Given an absolute path for a file (Unix-style), simplify it.For example,path = "/home/", => "/home"path = "/a/./b/../../c/", => "/c"Corner Cases:Did you consider the case wh
2015-03-11 13:00:31
434
原创 栈的应用:括号匹配
问题:判断算术表达式的括号是否匹配,例如:2+{(5-1)*4-[3-5]*3}匹配,2+{(5-1)*4-3-5]*3}不匹配。思路:出现右括号需与离其最近的左括号进行匹配。遇到左括号进栈,遇到右括号,若栈不为空,栈顶元素出栈,并判断其是否与对应的左括号一致。代码:#include#include#includeusing namespace std;bool isMatch(
2015-03-10 22:08:14
562
原创 两个栈实现队列+两个队列实现栈----C++
1. 两个栈实现队列思路: 我们先想象下队列有哪些功能?进队列(push)、出队列(pop)、队首元素(front)、队尾元素(back)。这里使用了两个栈stack1和stack2。进队列(push),直接进stack1。出队列(pop),若stack2非空,我们需要的恰好在栈顶,出栈;若stack2空,则所有stack1元素,并入stack2,再出栈。队首和队尾元素恰好就在两个栈的to
2015-03-10 21:38:08
670
原创 设计包含min或max功能的栈
问题:对Stack(栈)数据结构进行改进,加一个min()或max()功能,使之能在常数,即O(1),时间内给出栈中的最小值。可对push()和pop()函数进行修改,但要求其时间复杂度都只能是O(1)。以下只对如何求min进行阐述,max类似处理。解题思路:用min数组记录当前最小值。当有新数值x进栈时,就前一次的最小值进行比较,如果小于就将min值进行替换,否则保留。、详见代码
2015-03-10 21:33:56
542
转载 2013 年度最新的 20 大热门开源软件
转载连接:http://www.oschina.net/news/47468/2013-top-20-newest-opensource-projects1. EChartsECharts 开源来自百度商业前端数据可视化团队,基于html5 Canvas,是一个纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。创新的拖拽重计算、数据视图、值域漫游等
2014-12-29 10:21:42
505
原创 二叉搜索树(二叉排序数)的基本操作实现
本文实现了二叉搜索树的插入、查找、删除、求最大节点、最小节点以及直接前驱、直接后继节点的基本操作。二叉搜索树,二叉查找树,二叉排序树说的都是一个概念。这篇博文中我们称其为二叉搜索树。二叉搜索树指的是一棵空树,或者具有下列性质的二叉树:1)弱左字数不空,则左子树上所有节点的值均小于根节点的值;2)若右子树不空,则右子树上所有节点的值均大于根节点的值;3)左、右子树也分别为二叉搜索树;
2014-11-26 21:19:38
600
1
转载 32位64位操作系统基本数据类型字节大小
int型字长问题:① C/C++规定int字长和机器字长相同;② 操作系统字长和机器字长未必一致;③ 编译器根据操作系统字长来定义int字长; 由上面三点可知,在一些没有操作系统的嵌入式计算机系统上,int的长度与处理器字长一致;有操作系统时,操作系统的字长与处理器的字长不一定一致,此时编译器根据操作系统的字长来定义int字长:"比如你在64位机器
2014-11-17 20:07:22
525
转载 static和extern
一些基本概念:1. 编译单元(模块): 在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK ERROR), 因为它不像编译错误那样可以给出你程序错误的具体位置,你常常对这种错误感到懊恼,但是如果你经常使用gcc,makefile等工具在linux或者嵌 入式下做开发工作的话,那么你可能非常的理解编译与连接的区别!当在
2014-11-07 11:31:43
369
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人