随笔 - 204  文章 - 0  评论 - 15  阅读 - 32万
08 2013 档案
内部排序总结
摘要:温故而知新!分类:1. 插入排序 思想:其基本操作为将一个记录插入到已排好序的有序表中,从而使有序序列增1直接插入排序:基于顺序查找而得到插入位置折半插入排序:基于折半查找而得到插入位置(仅减少关键字比较次数) 二者的记录移动次数相等,所以时间复杂度均为O(n^2) 直接插入排序伪代码:2. 交换排序:冒泡排序快速排序(对冒泡的改进) 前者平均复杂度O(n^2),后者平均复杂度O(nlogn)3. 选择排序: 基本思想:每一趟在n-i+1个记录中选出关键字最小的记录并作为有序记录中的第i个记录。简单选择排序:通过n-i次关键字之间的比较,从n-i+1个记录中选出关键字最小的记录,并和... 阅读全文
posted @ 2013-08-27 22:35 -赶鸭子上架- 阅读(191) 评论(0) 推荐(0) 编辑
剑指offer--面试题23
摘要://该题原本想用递归实现,但却用循环实现了。。。//关键用了个队列#include void Print(BinaryTreeNode* pRoot, std::queue& Qbt){ if(pRoot != NULL) { coutm_nValue; if(pRoot->pLeft) Qbt.push(pRoot->pLeft); if(pRoot->pRight) Qbt.push(pRoot->pRight); }}int main(){ std::queue Qbt; ... 阅读全文
posted @ 2013-08-21 12:10 -赶鸭子上架- 阅读(233) 评论(0) 推荐(0) 编辑
剑指offer--面试题22
摘要:关键在于思路, 需要两个输入向量,而函数中需要一个辅助栈! 思路:以待判出栈序列为基础,逐个判断它与栈顶元素是否相等,相等则弹出且j++,这表明此元素可为出栈顺序元素,不相等则栈元素不断入栈,直至相等,否则则判为非出栈序列!#includebool IsStackSquence(int* array1, int length1, int* array2, int length2){ bool IsOutStack = true; if(array1 == NULL || length1 st; int i = 0; int j = 0; s... 阅读全文
posted @ 2013-08-21 00:00 -赶鸭子上架- 阅读(222) 评论(0) 推荐(0) 编辑
堆(heap)和栈(stack)的区别
摘要:转:一、预备知识―程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)― 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) ― 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)―,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放 4、文字常量区 ―常量... 阅读全文
posted @ 2013-08-14 22:13 -赶鸭子上架- 阅读(299) 评论(0) 推荐(0) 编辑
剑指offer--面试题21--相关
摘要:题目:设计包含min函数的栈,pop(),push(),min()的时间复杂度均为O(1)自己所写代码如下:(写‘栈’的代码还是有些不熟练!)#include using namespace std;const int MAX = 100;class Stack{private: int values[MAX]; int topindex; int minvalue; int minSecvalue;public: Stack(); virtual ~Stack(); int top() const; void push(int n); v... 阅读全文
posted @ 2013-08-14 15:28 -赶鸭子上架- 阅读(187) 评论(0) 推荐(0) 编辑
剑指offer--面试题21
摘要:题目:设计包含min函数的栈,pop(),push(),min()的时间复杂度均为O(1)自己所写代码如下:(写‘栈’的代码还是有些不熟练!)#include using namespace std;const int MAX = 100;class Stack{private: int values[MAX]; int topindex; int minvalue; int minSecvalue;public: Stack(); virtual ~Stack(); int top() const; void push(int n); v... 阅读全文
posted @ 2013-08-14 00:01 -赶鸭子上架- 阅读(136) 评论(0) 推荐(0) 编辑
剑指offer--面试题20
摘要:题目:从外向里顺时针打印矩阵做题心得:该题本质上并未考查复杂的数据结构及算法,而是考查了快速找规律的能力!!! 要想作出此题,必须先有绝对清晰的思路,否则越写越乱(因为涉及到很多的循环打印)自己当时的思路基本符合作者提供的思路: 先考虑怎么打印一圈(四个循环),再考虑如何结束打印(和作者的意图不太一样,自己想通过打印数 start * 2 && rows > start * 2) { PrintMatrixInCircle(numbers, columns, rows, start); ++start; }}void PrintMatri... 阅读全文
posted @ 2013-08-13 22:02 -赶鸭子上架- 阅读(223) 评论(0) 推荐(0) 编辑
剑指offer--面试题19
摘要:题目:求二叉树镜像根据作者思路,自己所写代码如下:void BinaryTreeMirror(BinaryTreeNode* pRoot){ if(pRoot == NULL) return; if(pRoot->pLeft != NULL || pRoot->pRight != NULL) { BinaryTreeNode* ptemp = pRoot->pLeft; pRoot->pLeft = pRoot->pRight; pRoot->pRight = ptemp; //递归调用 Bi... 阅读全文
posted @ 2013-08-13 18:17 -赶鸭子上架- 阅读(195) 评论(0) 推荐(0) 编辑
剑指offer--面试题17
摘要:题目:合并两个排序的单向链表自己所写代码如下:ListNode* MergeSortedLists(ListNode* pHead1, ListNode* pHead2){ if(pHead1 == NULL || pHead2 == NULL) return NULL; return (pHead1->value value)? MergeTwoList(pHead1,pHead2):MergeTwoList(pHead2,pHead1);}ListNode* MergeTwoList(ListNode* pFirst,ListNode* pSecond){ ... 阅读全文
posted @ 2013-08-13 15:37 -赶鸭子上架- 阅读(187) 评论(0) 推荐(0) 编辑
剑指offer--面试题16
摘要:#include//思路:遍历链表过程中,将各个指针入栈,再出栈进行反转ListNode* ReverseList(ListNode* pHead){ if(pHead == NULL) return NULL; ListNode* pNode = pHead; stack pNodeStack; while(pNode != NULL) { pNodeStack.push(pNode); pNode = pNode->m_pNext; } pNode = pNodeStack.top(); Li... 阅读全文
posted @ 2013-08-12 14:37 -赶鸭子上架- 阅读(198) 评论(0) 推荐(0) 编辑
剑指offer--面试题15--相关
摘要:感受:清晰的思路是最重要的!!!题目:求链表中间节点ListNode* MidNodeInList(ListNode* pHead){ if(pHead == NULL) return NULL; ListNode* pNode1 = pHead; ListNode* pNode2 = pHead; unsigned int step = 1; while(pNode2->m_pNext != NULL) { pNode2 = pNode2->m_pNext; step++; if((step & 0x... 阅读全文
posted @ 2013-08-12 12:04 -赶鸭子上架- 阅读(155) 评论(0) 推荐(0) 编辑
剑指offer--面试题15
摘要:题目:打印单向链表中倒数第k个节点以下为自己所写代码,未经过验证,只是写个思路。。。#include#include#includeusing namespace std;//节点定义struct ListNode{ int m_nValue; ListNode* m_pNext;};void FindKthToTail(ListNode* pHead, unsigned int k){ if(pHead == NULL) throw new std::exception("Invalid parameters!"); std::vector Values... 阅读全文
posted @ 2013-08-12 10:15 -赶鸭子上架- 阅读(192) 评论(0) 推荐(0) 编辑
剑指offer--面试题14--收获
摘要:按照作者的说法,作为应届毕业生的我来说,如果能写出初级程序员的参考代码来解决面试题14就可认为过关了。。。参考代码如下:void ReorderOddEven_1(int *pData, unsigned int length){ if(pData == NULL || length == 0) return; int *pBegin = pData; int *pEnd = pData + length - 1; while(pBegin < pEnd) { // 向后移动pBegin,直到它指向偶数 while(pBe... 阅读全文
posted @ 2013-08-11 21:31 -赶鸭子上架- 阅读(224) 评论(0) 推荐(0) 编辑
剑指offer--面试题14
摘要:#include "stdafx.h"#include using namespace std;//调整数组顺序使奇数位于偶数前void OddEvenSeparated(int* array, int length){ int indexfront = 0; int indexback = length - 1; bool bFinshed = false; while(indexfront 质量了。。。 阅读全文
posted @ 2013-08-11 18:14 -赶鸭子上架- 阅读(218) 评论(0) 推荐(0) 编辑
剑指offer--面试题13
摘要:题目:以O(1)的时间复杂度删除单链表中的某个节点自己所写代码如下://以O(1)时间删除链表节点//要求:单向链表,头指针,待删节点指针//链表节点struct ListNode{ int m_nValue; ListNode* m_pNext;};//O(n)的解法:从头遍历,找到pToBeDeleted所指节点的前一个节点再进行删除void DeleteNode(ListNode** pListHead, ListNode* pToBeDeleted){ if(pListHead == NULL || *pListHead == NULL || pToBeDeleted... 阅读全文
posted @ 2013-08-11 16:13 -赶鸭子上架- 阅读(298) 评论(0) 推荐(0) 编辑
剑指offer--面试题12
摘要:题目:打印从1~最大的n位数分析:知道陷阱在哪,即n很大时若用通常的int,long会溢出;想到用字符串解决,这涉及到字符转数字及反过来。 刚开始纠结于字符串怎么加1,想了片刻,觉得应该取出最后一位上的字符,转成数字+1再转成字符,但这就出现个问题:'9'加1后得到'10',这会产生进位。。。 到这思维就乱了。。。1、不断向前进位怎么解决?2、怎么判断到达最大值?在看过作者的代码后才豁然开朗。。。,解决方案:1、将进位与不进位分开,并且进位时设定nTakeOver用于下一字符的加,该过程用循环完成;2、同样判断最大值时,若第一位的数值=10了,那肯定已经到达最大 阅读全文
posted @ 2013-08-11 09:50 -赶鸭子上架- 阅读(540) 评论(0) 推荐(1) 编辑
剑指offer--面试题11
摘要:题目:求数值的整数次方,不考虑大数值情况 即实现函数:double Power(double base, int exponent)自己所写代码如下:#include "stdafx.h"#include double Power(double base, int exponent);int main(int argc, char* argv[]){ double base = -1; int exponent = 0; try { std::coutbool g_InvalidInput = false;bool equal(double num1, ... 阅读全文
posted @ 2013-08-10 22:01 -赶鸭子上架- 阅读(339) 评论(0) 推荐(0) 编辑
高质量代码
摘要:1、程序中变量/函数命名规则: 尽量用英文单词组合来对变量/函数进行命名,通俗易懂!2、代码完整性: 1、普通功能测试;2、边界测试(包括循环、递归终止条件);3、负面测试。3、对错误的3种处理方式: 1、由返回值告知错误(类似Windows API);2、出错误时,设置全局变量;3、异常处理 各方式优缺点如下: 阅读全文
posted @ 2013-08-10 15:59 -赶鸭子上架- 阅读(176) 评论(0) 推荐(0) 编辑
剑指offer--面试题10--相关
摘要:题目一:判断一个整数是不是2的n次幂实现大概如下:int main(){ int a = 256; if((a&(a-1)) == 0) //重要!! std::cout<<"YES!"<<std::endl; else std::cout<<"No!"<<std::endl; return 0;}题目二:输入整数m和n,计算由m得到n时需改变二进制位的个数。思路:先m|n(异或);再用上篇博客中的方法统计异或结果二进制中1的个数即可。重点理解+记住:一个整数(包括负数)减一后再与原来的整数做位与( 阅读全文
posted @ 2013-08-10 12:13 -赶鸭子上架- 阅读(112) 评论(0) 推荐(0) 编辑
剑指offer--面试题10
摘要:题目:求整数二进制表示中1的个数。分析:此题直接考查二进制表示与位运算!!! 正数和负数的二进制表示不同!在计算机中,正数的二进制表示即为通常所写的二进制;而负数的二进制表示则用补码表示,即原码的反码再+1。 比如:1) 9:在32位计算机中表示为(十六进制)0x00000009 (其原码=反码=补码=0x00000009); 2) -9:在32位计算机中表示为(十六进制)0xFFFFFFF7,原因:-9的原码=0x00000009,-9的反码=0xFFFFFFF6,-9的补码=0xFFFFFFF7 所以,-9的二进制表示中1的个数为31 ! 另外,拿8位二进... 阅读全文
posted @ 2013-08-10 10:49 -赶鸭子上架- 阅读(333) 评论(0) 推荐(0) 编辑
位运算及其操作
摘要:位运算是对二进制表示的一种运算,个人理解:由于位运算更接近于底层结构,所以运算更快、效率更高!共有5种位运算操作符:与(&),或(|),异或(^),左移(>)。操作实例如下:注意:右移 有符号数时,根据有符号数的最高位符号来添加右移时所空出的各位! 阅读全文
posted @ 2013-08-10 09:40 -赶鸭子上架- 阅读(274) 评论(0) 推荐(0) 编辑
负数在计算机中的表示方法
摘要:转载于:http://www.cnblogs.com/junsky/archive/2009/08/06/1540727.html对负数的二进制表示有些遗忘,在网上找了一下资料,贴出来已备再次遗忘:假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为:00000000 00000000 00000000 000001015转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。现在想知道,-5在计算机中如何表示? 在计算机中,负数以其绝对值的补码形式表达。什么叫补码呢?这得从原码,反码说起。 原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。比 阅读全文
posted @ 2013-08-09 23:01 -赶鸭子上架- 阅读(13152) 评论(0) 推荐(2) 编辑
剑指offer--面试题9
摘要:题目一:求斐波那契数列第n项自己所写代码如下:#include "stdafx.h"#includelong Fibonacci(unsigned int N){ long F0 = 0; long F1 = 1; if(N == 0) return F0; else if(N == 1) return F1; else { int n = 2; while(n <= N) { F0 = F0 + F1; F1 = F0 + F1; ... 阅读全文
posted @ 2013-08-09 14:16 -赶鸭子上架- 阅读(271) 评论(0) 推荐(0) 编辑
剑指offer--面试题8
摘要:题目:求旋转数组中的最小数字以下为自己所写代码:#include "stdafx.h"#include #include using namespace std;int RotateArrayMin(int* array, int low, int high);int main(int argc, char* argv[]){ const int length = 10; int array[length] = {15,17,18,3,5,6,7,9,11,12}; int Location = RotateArrayMin(array,0,length-1); ... 阅读全文
posted @ 2013-08-08 21:40 -赶鸭子上架- 阅读(225) 评论(0) 推荐(0) 编辑
快速排序(QuickSort)
摘要:第一次实际实现快速排序。。。,虽然之前理解其思想方法,但编程实现过程中仍出现了很多问题比如,区分一次快排和递归实现整体排序;递归时要注意递归终止条件(lowusing namespace std;//快速排序(QSort+QuickSort)//一次快排int QSort(int* list, int low,int high){ int SepValue = list[low]; while(low = list[low]) low++; list[high] = list[low]; } if(low == high) ... 阅读全文
posted @ 2013-08-08 16:48 -赶鸭子上架- 阅读(522) 评论(0) 推荐(0) 编辑
题目:两个单向队列构成一个栈
摘要:题目:两个单向队列构成一个栈//两个队列构成一个栈//StackWithTwoQueues#include //STL#includeusing namespace std;templateclass BStack{ public: BStack(); ~BStack(); void InStack(const T& elem); T OutStack(); private: queue q1; queue q2;};//思路:一个队列空,另一个队列则‘入栈’操作;// 在删除‘栈顶’... 阅读全文
posted @ 2013-08-08 12:01 -赶鸭子上架- 阅读(297) 评论(0) 推荐(0) 编辑
STL中的单向队列queue
摘要:转载自:http://blog.csdn.net/morewindows/article/details/6950917stl中的queue指单向队列,使用时,包含头文件。关键要会用queue,实际上就是掌握该类的各种操作,如下:常用函数push(e),pop(),front(),back(),size(),empty(),与栈的常用函数较为相似。在STL中,单向队列是以别的容器作为底层数据结构,再改变接口使之符合单向队列的特性。下面就给出单向队列的函数列表和VS2008中单向队列的源代码。VS2008中queue单向队列的源代码友情提示:初次阅读时请注意其实现思想,不要在细节上浪费过多的时间 阅读全文
posted @ 2013-08-08 11:14 -赶鸭子上架- 阅读(845) 评论(0) 推荐(0) 编辑
剑指offer--面试题7
摘要://两个栈实现一个队列#include //STL#includeusing namespace std;templateclass CQueue{ public: CQueue(); ~CQueue(); void appendTail(const T& node); T deleteHead(); private: stack stack1; stack stack2;};//思路:一个栈做添加队尾元素用;另一个做删除队首元素用。// 操作时,对应栈有数据,另一个为空。templa... 阅读全文
posted @ 2013-08-07 23:32 -赶鸭子上架- 阅读(311) 评论(0) 推荐(0) 编辑
剑指offer--面试题6
摘要:题目:由前序、中序遍历序列重建二叉树虽然思路能想到,但是实际写却无从下手。。。下面重现作者代码,多多实践。。。#include//首先定义二叉树节点struct BinaryTreeNode{ int bt_Value; BinaryTreeNode* bt_pLeft; BinaryTreeNode* bt_pRight;};//核心函数:ConstructCore(int* StartPreOrder, int* EndPreOrder, int* StartInOrder, int* EndInOrder);BinaryTreeNode* ConstructCore(i... 阅读全文
posted @ 2013-08-07 18:02 -赶鸭子上架- 阅读(217) 评论(0) 推荐(0) 编辑
剑指offer--面试题5
摘要:到现在为止,看过的书+代码有一定量了,并且也参加了个比赛,给自己的总体感觉:编程需要的是灵活的头脑,书里的东西只是讲个规则、思想,其实际实现可以千差万别! 潜在的规则+灵活的思维 = 程序!在做面试题5时,发现Utilities文件夹下的内容太好了,基本上是那些数据结构的实现:链表、二叉树、树等(缺个图),准备通过学习这些代码来深入理解各个数据结构及其接口/成员函数。拿该题来说,解决单链表!!!题目:逆序打印单链表一、自己写单链表类及其操作花了一下午时间,无语了。。。1、List.h//单链表数据结构及基本操作//最大节点数const int MAXLENGTH = 50;//节点struc. 阅读全文
posted @ 2013-08-06 11:34 -赶鸭子上架- 阅读(250) 评论(0) 推荐(0) 编辑
STL中的stack(堆栈)
摘要:转载:http://blog.csdn.net/morewindows/article/details/6950881栈(statck)这种数据结构在计算机中是相当出名的。栈中的数据是先进后出的(First In Last Out, FILO)。栈只有一个出口,允许新增元素(只能在栈顶上增加)、移出元素(只能移出栈顶元素)、取得栈顶元素等操作。在STL中,栈是以别的容器作为底部结构,再将接口改变,使之符合栈的特性就可以了。因此实现非常的方便。下面就给出栈的函数列表和VS2008中栈的源代码,在STL中栈一共就5个常用操作函数(top()、push()、pop()、 size()、empty() 阅读全文
posted @ 2013-08-06 09:33 -赶鸭子上架- 阅读(656) 评论(0) 推荐(0) 编辑
单链表的创建与删除
摘要:对于各种数据结构,比如set,map,二叉树等等,现在还处于很混乱的状态。。。想通过《剑指offer》以及自己的亲手编写各种数据结构的实现与操作来熟练掌握,还是跟着此书的节奏走。目标:在半个月内熟练!首先,单链表的添加元素和删除元素,如下://单链表的添加与删除元素操作//1、单链表中将元素添加至链表尾部(也可用于创建链表)//思路:1、定义节点;2、由前到后遍历后插入到尾部,改变尾指针;// 3、特殊情况:单链表为空,此时添加元素后会改动头指针,而非尾指针struct ListNode{ int m_Value; ListNode* m_pNext;}void AddT... 阅读全文
posted @ 2013-08-05 22:08 -赶鸭子上架- 阅读(646) 评论(0) 推荐(0) 编辑
map中的erase成员函数用法
摘要:转载于http://www.cnblogs.com/graphics/archive/2010/07/05/1771110.html http://hi.baidu.com/sdkinger/item/dcad78e374707ff12b09a453一、#include #include #include using namespace std ;int main(void) { map m ; m.insert(pair(1, "abc")) ; m.insert(pair(2, "def")) ; m.insert(pair(3, "def 阅读全文
posted @ 2013-08-03 20:24 -赶鸭子上架- 阅读(2369) 评论(0) 推荐(0) 编辑

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示