![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 86
C++程序员Carea
十年一线开发经验,热爱 C++ ,热爱编程
展开
-
C++ std::list实现大整数加法运算
#pragma once#include #include #include using namespace std;class CBigInt{public: CBigInt(void); CBigInt(const string& _str); CBigInt& Set(const string& _str); ~CBigInt(void);原创 2016-11-18 12:40:25 · 1405 阅读 · 0 评论 -
递归算法(求n的加法组合,将一个整数拆分成多个整数相加的形式, O(N)时间,O(N)空间)4.0版
网上的多种解法比较复杂,本文用递归方法,22行代码搞定。时间和空间复杂度已经降到最低! //n give the sum of a list,and start give the first number of the listvoid f(int n,list& list1,int start) { if (n==1) { //输出前缀,当然前缀肯定也全部都是1原创 2012-09-27 11:50:31 · 17468 阅读 · 11 评论 -
C++队列模拟银行排队叫号
原题如下:大家可以根据题目自己做一遍,作为对基础的夯实和对C++学习的最佳实践。说明:1 这个题目的第一问老师给出了伪代码,伪代码是很关键的,因为这里面没有多线程技术。为了能够用最基本的C++语句完成多个队列的协作(等待队列,服务队列,完成队列)伪代码可以说给出了程序的骨架。2 附加题的难度还是不小的,工作量要建立在第一问的框架和基础设施上,如果第一问的程序写的好,第二问就可以较顺利的...原创 2017-10-30 20:25:14 · 6419 阅读 · 1 评论 -
C++表达式求值(Stack and Expression)
表达式求值有几个核心的技术:百度网盘全部源码QQ35085516941 中缀infix表达式转后缀postfix表达式(文本解析)解析中缀表达式到后缀表达式的核心思想就是对表达式逐步向前解析;如果遇到一个空格就连续“吃掉”紧接着的空格;如果遇到一个操作数就“继续吃掉紧接着的整数中的低位数字,完整一个完整整数的读取;如果遇到了不应该出现的字符就抛出异常。1.1 运算符操...原创 2017-10-05 22:33:37 · 4988 阅读 · 0 评论 -
动态规划算法(连续子数组最大和,O(N)时间复杂度O(1)空间复杂度) 【更新于:2018-05-13】
这个题目最早在13年阿里笔试出现,直到前两天面试另一家电商又出现,哎,欠的都是要还的。这个问题的思路如下:一维数组的下标连续的元素构成连续子数组,求所有连续子数组中和最大的那个子数组。解析:2018-11-081 首先这个问题要转化为Q(n)的问题,对于Q(n)的问题要转化成Q(n) = Q(n-1) + An的问题。2 只要能意识到这一点,其实就可以有希望在O(n)的时间内解决,...原创 2018-05-12 08:43:54 · 4639 阅读 · 0 评论 -
数据结构与算法:图的邻接矩阵邻接表表示:最短路径求解 大作业
为了这个作业我把《算法导论》的 22章“图的基本算法”23章“最小生成树”24章“单源最短路径”25章“每对顶点间的最短路径”全部看了一边,光是理论就看了一周的时间(晚上看的啊)完全是对着书上的伪代码实现,不得不承认,此书理论相当棒,伪代码超简单,给实现带来了相当的方便。下面是实现的头文件:#pragma once#include <fstream>#include <io...原创 2018-06-01 23:52:48 · 2796 阅读 · 0 评论 -
数据结构与算法
链表微软暑期实习笔试题 合并两个有序单链表https://blog.csdn.net/calmreason/article/details/7804774栈表达式求值https://blog.csdn.net/calmreason/article/details/78163268队列模拟银行排队叫号https://blog.csdn.net/calmreason/arti...原创 2018-11-11 16:43:37 · 444 阅读 · 0 评论 -
AVL树-平衡二叉树
平衡二叉树是高度平衡的二叉树:1 左右子树的高度差最多为1.2 主要的实现地方是插入平衡和删除平衡。3 为了实现平衡,每个节点保存了一个高度h成员。4 当插入和删除破坏了平衡的时候需要进行旋转;5 根据左右子树高度差的不同进行四中不同的旋转:左左、右右、左右、右左百度云下载sln文件:https://pan.baidu.com/s/1pxPGQDYhbcG-E6sE26Wf...原创 2018-11-13 23:04:25 · 363 阅读 · 0 评论 -
排列组合算法(微软笔试题:输出1到n的全排列)
这里希望能更清楚,如果不好,欢迎拍砖。12345的next是12354,从这里我们可以看出,next就是将大数字提到小数字的前面,即对调一个升序的两个数字。 而对于更一般的情况,对如下排列234578 改变任意个升序的数字对都可以得到后续的排列。哪一个才是next呢? 当有多个升序的数对事,在高位对调,低位的对调会被跳过。我们应该先把低位的都改对调完再对调高位的。原创 2012-08-09 14:36:40 · 4503 阅读 · 0 评论 -
用C++处理汉子要注意的细节
常见操作 cin>>ch getline(cin,ch) cin.get(ch) 的注意事项 Ø fin>>a 吃掉a之前的所有空白字符(空格,回车,tab键),后面遇到空白符结束,但并不吃掉后面的空白符Ø getline(cin,ch) 刚开始遇到/n 结束,并吃掉。结尾遇到/n结束,并吃掉注:这里尤其要注意有可能cin>>ch ;执行时在流缓冲区中原创 2011-06-16 09:42:00 · 1431 阅读 · 0 评论 -
Matlab字符串匹配,华为编程最给力
function exist=wildcardl(pat)%pat='http://*.huawei.com';->%pat='http://(\w+\.)+huawei.com' pat=strrep(pat,'*.','(\w+\.)+'); pat=strcat(strca原创 2011-07-28 17:35:06 · 3333 阅读 · 0 评论 -
打印螺旋矩阵
总结上面的规律,从1开始赋值,并打印。其方向按照右,下,左,上,右,下。。。。。。的次序输出,每次输出一个方向;在一个方向上线段的长度符合1,1,2,2,3,3,4,4,。。。。。的规律。输入n表示矩阵的行数,也是列数。用pair表示方向,(x,y)表示矩阵的小标。//输出一个螺旋队列void spiralism(int size){ queue> dircetion; dir原创 2012-09-08 17:51:02 · 1613 阅读 · 0 评论 -
复制二叉树(非递归实现)
pbinary_tree_node copy_binary_tree(pbinary_tree_node bt){//先序遍历输出一颗树的全部结点值1,2,3 stack stack_left,stack_right; pbinary_tree_node newbt; if (bt!=NULL) { //new root newbt=new binary_tree_node;原创 2013-01-15 19:32:07 · 5160 阅读 · 0 评论 -
用两个栈实现一个队列,用两个队列实现一个栈,C++ STL版
不必解释了吧,这里代码应该就能说明问题了#include #include #include using namespace std;//Queuetemplateclass Queue{public: void pop(void); void push(const T& t); const T& front(void); bool empty原创 2014-11-10 19:57:57 · 2160 阅读 · 0 评论 -
动态规划算法 (微软笔试题,求连续子数组的最大和)
这个问题一般用动态规划算法可以再线性时间内得到解。动态规划就是将大问题化为小问题,先把小问题解决了,最后大问题也就解决了。本问题是从一个元素开始,到两个元素,最后到数组的全部元素来逐步解决的int main( void ) { timer t; //top_k_words(); int a[]={1,2,3,-8,1,2,3,4,-99,100,101,-400,100原创 2012-07-22 14:40:50 · 1893 阅读 · 0 评论 -
动态规划算法(微软一面笔试题:股票交易,O(N)时间复杂度O(1)空间复杂度)
自从暑假面试被鄙视之后,回来就经常想这个问题,到今天应该快两个月了。在这个下午,我又拿出草稿纸,总算找到了思路,把它给搞定了。就像一个心愿一样,完结了。问题是这样的,如同题目:原题就不赘述了,化简之后的问题就是在数组中找到两个元素,计算后面的元素减去前面的元素的差。求出所有差的最大值。(你可以认为你在炒股票,买入价格和卖出价格就是你的盈利)当时想到的方法是,如果一遍遍历这个数组,找到MAX,MIN原创 2012-08-24 15:18:13 · 8791 阅读 · 9 评论 -
TOP K算法(微软笔试题 统计英文电子书中出现次数最多的k个单词)
在v_JULY_v的文章中找到了这个问题的解法后用C++实现了一下,发现C++的代码非常的简洁。主要用到了标准库中的hash_map,优先级队列priority_queue。 算法的思路是:从头到尾遍历文件,从文件中读取遍历到的每一个单词。把遍历到的单词放到hash_map中,并统计这个单词出现的次数。遍历hash_map,将遍历到的单词的出现次数放到优先级队列中。当原创 2012-07-22 12:00:29 · 5503 阅读 · 0 评论 -
10进制整数转化为2进制,或任意进制整数
#includeusing namespace std;void Convert(int n){ stack stackdata; while(n) { stackdata.push(n%2); n=n/2; } while(!stackdata.empty()) { cout stackdata.po原创 2011-06-08 11:54:00 · 1604 阅读 · 0 评论