
数据结构和算法
60荷兰盾
这个作者很懒,什么都没留下…
展开
-
二叉树的基本操作,前序遍历,后续遍历,中序遍历
#include "stdafx.h"#include #includeusing namespace std;typedef struct BiTNode{ char data; BiTNode *lchild,*rchild; //左右孩子的指针}*BiTree;//先序创建一个二叉树int CreateBiTree(BiTree &T,string &str,in原创 2012-11-08 11:16:36 · 1011 阅读 · 0 评论 -
无头结点的链表逆置
要是有头结点的话,代码可以简单很多啊! 这是无头结点的链表逆置,链表的生成不想用函数生成了,直接强制生成了一个。// delete.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include using namespace std;struct ListNode{ int data; ListNode *next;};ListNo原创 2013-05-17 15:44:14 · 1978 阅读 · 0 评论 -
掷骰子游戏 华为机试
掷骰子游戏问题描述: 在掷骰子游戏中,会根据所掷数字在地图中前进几步,前进完成后需要根据当前地图位置所示的障碍进行相应操作,其中障碍表示:1) 9:无障碍2) 1:停掷一轮,即下轮所掷数字无效;3) 2:后退两步,如果已经到起点不再后退;4) 3:奖励前进一步如果在游戏过程中,已经走到地图终点,则游戏结束。根据输入的地图数组,和5个骰子数的数组,返回最终玩家原创 2013-04-25 16:27:40 · 1759 阅读 · 0 评论 -
动态规划之——矩阵链乘法
在《算法导论》第二版中,(P197),关于动态规划的算法,这个动态规划解决的是矩阵链乘法的加括号的问题。给定由n个要相乘的矩阵构成的序列,要计算乘积 最小的相乘次数。算法与《装配线调度》有一些不同点。每一个状态m[i][j]的值不是仅与前两个有关,而是与1~n的值都有关。所以前面所有的值在求最终的值时都会被用到。算法导论中的矩阵看起来真是难受,这个也是因人而异吧,倒过来的矩阵总是看起来原创 2013-04-24 16:06:32 · 1015 阅读 · 0 评论 -
动态规划之——装配线调度
在《算法导论》第二版中,P193,介绍了动态规划的装配线调度的问题,这个问题咋一看貌似很难,其实只要认真的读,发现它真是一个说明动态规划的好例子,而且题目的难度很低,非常好理解!题目我就不想说了,看书理解的更透彻。这篇博客主要是贴代码,将其实现了。这里我把进入和输出装配线的值都直接加到f数组中,简化计算。#include "stdafx.h"#include using namespace原创 2013-04-23 11:11:54 · 1202 阅读 · 0 评论 -
常用排序算法总结
/******************************************不稳定的排序算法:选择排序(selection sort)— O(n^2)希尔排序(shell sort)— O(nlog n) 如果使用最佳的现在版本堆排序(heapsort)— O(nlog n)快速排序(quicksort)— O(nlog n) 期望时间,O(n^2) 最坏情况; 对于大的、乱数原创 2013-04-18 16:16:18 · 1230 阅读 · 0 评论 -
小知识点(一)
int main(){ char *string1 = "hello world"; char *string2 = "hello world"; char string3[] = "hello world"; char string4[] = "hello word"; if ( string1 == string2 ) cout<<"string1 string2 is t原创 2013-03-10 21:00:31 · 975 阅读 · 0 评论 -
对于C++文件操作的小代码
一.程序要把一个txt文件按行读入一个vector中,然后每行再细分为单词输出,用了sstream的函数#include "stdafx.h"#include #include #include #include #include #include using namespace std;int main(){ string word; string line; v原创 2013-03-12 16:59:02 · 1113 阅读 · 0 评论 -
关于图的一个小递归
下图是一个有向图,输入,打印的所有路径仔细研究这个图的特点,发现以下规律:对任何结点i,都可以走到i+1和i+2,当然如果它们不超过9的话。由于要打印路径,因此需要保存查找过程中的部分路径信息。但是这个图是不需要用图的啥啥遍历来解决的,不能想的太复杂。下面是个递归算法,网上还有“正向”的算法,,可以搜一下#include "stdafx.h"#includ原创 2013-03-06 15:06:43 · 932 阅读 · 0 评论 -
大数相乘
不知道原始作者了,但是写的不错,代码重新调整了下格式,加了点注释。# include# includevoid multiply(char* a,char* b,char* c){ int i,j,aLength,bLength,* tmpResult; aLength=strlen(a); bLength=strlen(b); tmpResult=new int[sizeo转载 2013-05-05 20:33:28 · 927 阅读 · 0 评论 -
深度探索C++ 对象模型第91页的疑问
在《深度探索C++对象模型》这本书的第91页中,有这样一个代码,#include using namespace std;typedef int length;class Point3D{public: void mumble( length val ) { _val = val; } length mumble() { return _val; }private:原创 2013-06-11 19:53:48 · 1372 阅读 · 3 评论 -
字符串最长不含重复字符的子串长度
题目很简单,假如输入“abcdbf”,那么最长不含重复字符的字串就为“cdbf”,长度就是4.这里没有要求输出子串,想要输出稍微加点东西就行了。从网上看了很多个版本,一般用的是动态规划。但是这个算法不需要用到动态规划。从网上搜到一个很好的代码,共享之。这个算法很容易理解。首先定义一个hash表,也就是times这个表。记录每个字符是否出现过,要是没有出现就是0,出现了就把它置为1.要是没有遇到转载 2013-09-15 22:31:38 · 2185 阅读 · 0 评论 -
设有一头小母牛,从出生第四年起每年生一头小母牛,按此规律,第N年时有几头母牛?
这题有个关键点,当一头牛过了4年后就开始每年都生小牛了,我想用vector来实现,每头牛加入的时候都初始化为1,就是年龄为1,每次遍历一遍vector,把每个数加1,也就是年龄加1,要是年龄大于等于4,那么在vector后面添加1,也就是添加一头小牛。#include "stdafx.h"#include #include using namespace std;int main原创 2013-09-13 17:17:30 · 9157 阅读 · 0 评论 -
关于《深入理解计算机系统》代码加速的思考
在《深入理解计算机系统》这本书的时候,有一个这样的知识点引起了我的注意:例如下面这段代码:代码1: const int length = 100000; float data[length]; memset(data,1,sizeof(float)*length); for ( int i = 0; i < length; ++i ) { data[i] = 3.0;原创 2013-08-13 17:21:29 · 1440 阅读 · 0 评论 -
动态规划之——拦截导弹 NOIP1999(提高组) 第一题
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要转载 2013-08-22 09:19:22 · 2457 阅读 · 0 评论 -
二元树中和为某一值的所有路径(递归与非递归的方法)
题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如输入整数22和如下二元树 10 / \原创 2013-08-21 16:06:57 · 1624 阅读 · 0 评论 -
二叉树的层次遍历,叶子节点的个数,是否为完全二叉树等等
#include "stdafx.h"#include #include #include #include using namespace std;//定义树的节点typedef struct BiTNode{ char data; BiTNode *lchild,*rchild; //左右孩子的指针}*BiTree;//先序创建一个二叉树 int Crea原创 2012-11-09 20:59:24 · 1094 阅读 · 0 评论 -
动态规划之——最长不下降子序列
最长不下降子序列是一个经典的动态规划问题。假如给出这样一个数组int data[] = {1,5,2,7,6};这个数组有4个最长不下降子序列1,2,7和1,2,6,和1,5,7,和1,5,6,都是长度为3的序列。我们要是求最长的不下降子序列的长度,求得的结果就是3. 我们可以用一个数组longest[]表示最长的不下降子序列的长度,那么当我遍历的数组下标为i的时候,如果data[i]比前面原创 2013-08-20 15:38:08 · 1664 阅读 · 0 评论 -
hash表的一点小小的总结
在大数据和数据库的很多地方都会用到hash方法,hash方法由hash表,hash函数,冲突处理几大“硬件”组成。这是july的博客,但是内容很多很杂,所以想结合书本中的内容做些简单的总结,供自己和大家随时复习一下!一般我们查找都是通过二分查找,二叉排序树查找等等,这些查找都是要通过比较的,而且有些算法还是要比较很多次的,非常好的情况就是通过某种映射,直接找到要查找东西的地址。这听原创 2013-05-22 22:47:24 · 1140 阅读 · 0 评论 -
排列组合(二)
关于排列组合算法有个总结的链接是http://blog.youkuaiyun.com/gningh/article/details/8209481这是对前面交换法和字典序法的实现。交换法的非递归实现目前还有些问题,自己没有找到,希望高手路过的可以纠正下。#include "stdafx.h"#include #include #include using namespace std;typed原创 2013-01-13 21:27:14 · 591 阅读 · 0 评论 -
C++ txt文件中的数据读入数组
#include #include using namespace std;int _tmain(int argc, _TCHAR* argv[]){ float arr[100000]={0}; ifstream infile("D://1.txt"); int count = 0; while(!infile.eof()) { infile>>arr[count];原创 2012-12-12 19:09:00 · 5246 阅读 · 2 评论 -
不排序找出任意5元组的中间元
假如我们对5元组中的元素进行排序,我们只需要7次比较,就可保证把5元组排好序。详见我的博文http://blog.youkuaiyun.com/gningh/article/details/7341403当我们只想找到中间元,不想对其排序时,我们要多少次比较?其实我们最多只需6次比较就可以得到!(次数太少了点吧?,我想了很久,想出来个错的!)下面是从网络中搜的解决方法,原文见文章末尾的链接方法一:转载 2012-12-07 11:18:38 · 1088 阅读 · 1 评论 -
括号的匹配检验
//只是一个括号匹配检验的程序,假设只有(和【两种。#include "stdafx.h"#include #include #include #include using namespace std;int _tmain(int argc, _TCHAR* argv[]){ cout<<"输入一个字符串:"<<endl; string str; cin>>str原创 2012-11-04 15:50:59 · 894 阅读 · 0 评论 -
数制转换 递归实现
//数制转化 递归实现#include int conservation[100]; //保存结果的数组int number; //数组中保存结果实际的位数int change(int base,int jinzhi){ //数制转换程序 //base为基数,jinzhi为想要转化的进制 int a; int b; a=base%jinzhi原创 2012-11-02 19:39:31 · 1424 阅读 · 1 评论 -
利用链表计算多项式的相加
#include "stdafx.h"#include #include #include using namespace std;//typedef ElemType int;typedef struct { float coef; //系数 int expn; //指数}term,ElemType;//定义链表节点结构typedef struct原创 2012-03-11 10:36:27 · 849 阅读 · 0 评论 -
C++ primer 管理指针成员 读书笔记
在我们编写实际的代码的时候,C++中是尽量不要使用指针的。因为指针是天使和魔鬼的混合体,指针虽然可以带来很高的效率,但是却可以引入很多的麻烦,如悬垂指针,内存泄露等等。当我们必须使用指针的时候,我们该如何掌握指针呢?《C++ primer》这本书总结的有3种方法管理指针成员: 1.指针成员采取常规指针型行为。这样的类具有指针的所有缺陷但无需特殊的复制控制。 2.类可以实现所谓的“智原创 2012-11-02 09:32:47 · 697 阅读 · 0 评论 -
C++primer 消息处理示例
//Fold.h#include #include #include class Folder;class Message { friend class Folder;public: // folders is initialized to the empty set automatically Message(const std::string &str转载 2012-10-30 21:19:33 · 1335 阅读 · 2 评论 -
二叉树的中序输出
// createBiTree.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #include using namespace std;//定义二叉树的结构typedef struct BiTNode{ char data; struct BiT原创 2012-06-22 21:52:19 · 1208 阅读 · 0 评论 -
迷宫问题
迷宫问题是典型的回溯问题,还用到我们比较熟悉的栈结构。敏姐给的书中的算法是这样的:设定当前位置的初始值为入口位置;do{ 若当前位置可通, 则 { 将当前位置插入栈顶; //纳入路径 若该位置是出口位置,则结束; //原创 2012-11-06 14:24:09 · 1043 阅读 · 0 评论 -
将一个整数逆序输出,分别给出递归和非递归算法
整数的逆序输出,递归算法:#include "stdafx.h"#includeusing namespace std;void reverse (int x){ int t_reserved = x; //临时保存x的值,因为x的值还要递归中使用 if (x==0) return; //如果是0,则程序结束 else if (x>0&&x<10)原创 2012-11-06 16:42:08 · 7504 阅读 · 1 评论 -
容器通过数组初始化
在《c++ primer》第9章的9.1.1容器的初始化有这样的容器初始化的方式:原文:回顾一下指针,我们知道指针就是迭代器,因此允许通过使用内置数组中的一对指针初始化容器也就不奇怪了: char *words[] = {"stately", "plump", "buck", "mulligan"}; // calculate how many elements原创 2012-12-09 10:23:07 · 1745 阅读 · 3 评论 -
编写算法输出从n个数中取k个(k小于等于n)的所有组合
编写算法输出从n个数中取k个(k小于等于n)的所有组合,要求每个组合是从大到小的顺序例如,当n=5,k=3时,你的算法该输出:543,542,541,532,531,521,432,431,421,321 这是一道东大的自主考研的题目,咋一看貌似不难,没想到做起来就尴尬了,简单的利用循环是不行的,必须要采用其他的方法。一下是这道题的一些解法,以后要找到了好的方法陆续加进去,欢迎大家把自己的原创 2012-12-06 14:56:16 · 9518 阅读 · 2 评论 -
Dijkstra 算法
Dijkstra算法是从求从某个源点V0到其余各顶点的最短路径问题。,其算法的具体思想是,有两个集合,一个是最短路径集合S,还有一个是未加入S的集合V-S,这些点待加入S中,只要加入了S中,那么这个点就是源点V0到这个点的最短路径了。其实这个算法的思想还是挺简单的,也是运用了贪心算法,严蔚敏书中和维基百科等,把这个问题讲的有点复杂了。我想结合严蔚敏的书中的表述和图例,尽量把这个问题讲的容易些。原创 2012-11-20 09:14:07 · 897 阅读 · 0 评论 -
图的递归深度遍历(邻接矩阵表示)
#include "stdafx.h"#include using namespace std;const int MAX_VERTEX_NUM=5; //邻接矩阵最大的维数//图采用邻接矩阵存储的定义typedef struct MGraph{ int AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; //邻接矩阵原创 2012-11-16 16:10:55 · 1562 阅读 · 0 评论 -
深入剖析 linux GCC 4.4 的 STL string
深入剖析 linux GCC 4.4 的 STL stringPosted on 2012 年 11 月 26 日 by zieckey | Leave a reply本文通过研究STL源码来剖析C++中标准模板块库std::string运行机理,重点研究了其中的引用计数和Copy-On-Write技术。平台:x86_64-redhat-linuxgcc version 4转载 2012-11-29 11:47:59 · 1917 阅读 · 0 评论 -
unsigned int的最大值(用十进制表示)
具体的思想是当unsigned int 的每一位都是1的话,那么这个值是最大的。我们可以采用一直向左移位,每次移位后加1,这样移动31位后,再加1,那么32位都是1了!嘿嘿。结果是4294967295#include using namespace std;int main(){ unsigned int a=1; for (int i=30;i>=0;--i){原创 2012-11-13 14:55:26 · 14533 阅读 · 0 评论 -
求二叉树的深度,递归与非递归算法
递归算法:int FindTreeDeep(BiTree BT){ int treeDeep=0; if(BT){ int lchild=FindTreeDeep(BT->lchild); int rchild=FindTreeDeep(BT->rchild); treeDeep=lchild>=rchild?lchild+1:rchild+1; } return tree原创 2012-11-08 19:02:48 · 2368 阅读 · 0 评论 -
如何将二维数组作为函数的参数传递
如何将二维数组作为函数的参数传递 作者: jatix 邮箱: jatix@163.com QQ: 52287017声明: 如果你是得道的大侠,这篇文章可能浪费你的时间,如果你坚持要看,我当然感觉很高兴,但是希望你看完了别骂我!如果你发现我这篇文章有错误的话,你可以提出批评以及指正,我将很乐意地接受。*_*概述: 今天写程序的时候要用到二转载 2012-03-21 10:10:30 · 1063 阅读 · 7 评论