算法
文章平均质量分 67
codeAB
这个作者很懒,什么都没留下…
展开
-
getchar putchar函数用法
getchar函数从输入流中读取一个单个的字符,如果输入的是字符串,函数也只读取头一个字符,如果下面还有getchar函数则接着上个getchar函数读到的下一个字符读而不需要继续输入就会返回一个读取的字符,这里涉及到缓冲,就是我们输入的字符流其实是存在于缓冲区中,所以下一个getchar函数才能接着读取;举个例子来看看具体用法;#includeint main(){ c原创 2013-03-06 20:38:03 · 3090 阅读 · 0 评论 -
链表逆置
好些时间没有搞数据结构了,昨天下午老师让我么写个单链表的逆置,当时做了几到都没有测试过;晚上耍去了……今天上午又做了一到过了,这次感觉比较有意义,对内存上的分配更加清新了;上课没听老师讲好像记得他用的两个指针,我写的时候用了四个指针,我做的时候在桌面画了一个图,看着这个图写出来的;主要说下算法:void Reverse(List Head){ List pTwo,p原创 2013-04-09 10:31:27 · 877 阅读 · 0 评论 -
快速排序
快速排序利用分冶算法,首先在在待排序元素中选择一个标记元素flag(一般都喜欢用第一个元素作为标记,下面的一段代码也这样写),快速排序的第一步排序结果是flag左边的元素都小于flag,右边的元素都大于flag;于是flag肯定是排在了最终的正确位置,就是说通过一次排序可以将一个元素排到正确位置;然后调用递归,将flag左边的元素和右边的元素分别继续排;就这样一直递归,直到遇到递归结束原创 2013-03-07 20:38:10 · 911 阅读 · 1 评论 -
二叉树遍历
先序遍历:访问根结点,先序遍历左子树,先序遍历右子树;中序遍历:中序遍历左子树,访问根结点,中序遍历右子树;后序遍历:后序遍历左子树,后序遍历右子树,访问根结点;从上面的定义看出是个递归的过程:下面以中序遍历静态链式二叉树为例:#includetypedef struct node{ struct node * lchild; struct node * rchild原创 2013-03-19 17:23:40 · 848 阅读 · 0 评论 -
双向循环链表
相对于单向链表就是新增加一个指针域用来保存上一个结点的的地址也没什么特别的,在写的时候想了一下,头结点要不要用来存放数据,第一种想法是作为普通结点一样用来存放数据,这样的麻烦是遍历问题,怎么才知道这个链表遍历完了,也就是说找不到遍历停止的条件,如果要解决的话可以增设一个静态变量 CNT 用来保存结点的个数,利用CNT就可以控制遍历,这样也有问题的,比如在遍历的时候没有遍历完而是在中途就原创 2013-04-27 16:35:00 · 837 阅读 · 0 评论 -
插入排序
插入排序的原理:将待排序的元素分为两部分,第一部分用来保存已排序的,第二部分保存还未排序的,初始时第一部分为空,第二部分为整个数组;开始排序:从第二部分取出一个元素放到第一部分,接着又取出一个元素插到第一部分(插入到合适位置),第二个元素插入时就和第一部分中现有的元素比较,直到插入到准确位置,然后一个一个的将第二部分的元素插入到第一部分直到排好序;一般写程序之前要先用自然语言有个清原创 2013-03-08 13:35:04 · 1246 阅读 · 0 评论 -
成绩管理系统链表实现
#include#include#include#include#includetypedef struct L{ char Name[30]; long long Num; float English; float C_language; struct L *Next;}*Node;void Menu(); //功能菜单 vo原创 2013-03-26 08:27:57 · 1392 阅读 · 0 评论 -
二叉树的性质
二叉树的性质性质1: 在二叉树第i层上至多有2i-1 个结点(i≥1)。方法1证明:归纳法当i=1时,二叉树的第1层只有一个根结点。2i-1=21-1=20=1成立。假设该命题对所有j(1)成立,即第j层上至多有2j-1个结点,那么第 i-1层至多有2i-2个结点。因为二叉树每个结点的度不超过2,因此,第i层 的结点个数最多是第i-1层结点个数的2倍,即最多不超过原创 2013-03-19 17:08:24 · 974 阅读 · 0 评论 -
链表
链表在数据结构中不难但是用的很多也算是数据结构中必须掌握的内容;数据结构学了很久了,现在写一些也当做是回顾吧,都说数据结构重要;每次都是,除了代码好像就么有什么可写的了,哎;反正就是跟线性表类似,毕竟都是线性结构;把原先连续的储存单元换成了分散的节点,每一个节点分为数据域和指针域;数据域存放数据,指针域存放下一个节点的地址,注意下一个节点在物理存储上不一定挨着的;我们在遍历一个链表的时候是靠节点的原创 2013-02-24 10:51:55 · 498 阅读 · 0 评论 -
01背包问题
特点是每种物品只有一件,可以选则放或不放,有i件物品,每件物品的重量是w[i],价值是v[i];给定一个包,这个包最大支持重量为AW;问题是要怎么放这些物品能使包中的总价值最大;给一个实例看的更懂些:有三件物品:重量依次为:15,18,10价值依次为:24,25,15贪心算法分析首先要找到贪心的原则:第一种原则:以重量最轻(即将重量最轻的物品依次放入包中,直到超原创 2014-02-10 19:33:40 · 751 阅读 · 0 评论 -
循环队列
线性结构的不多说,是一种操作受限制的线性结构,推荐队列对比起栈学习会更简单,也就是和栈差不多,多了而一个指针,栈是由一个头指针就ok了,队列多一个尾指针,因为栈是先进后出,队列是先进先出;比如排队买票排在前面的先买到票;刚开始先看普通队列,不断的入队,rear往上移动,出队front往上移动,这个队列的实际有效区域在两个指针之间,于是随front往上移动的过程中front以下的空间原创 2013-03-11 16:51:18 · 1017 阅读 · 0 评论 -
栈
栈是一受限制的线性结构,只能在栈顶进行插入和删除,特点是先进后出;像枪的弹夹一样的结构;同样是先开一个较大的数组用来模拟,称为顺序栈;也可以用链表来实现,叫链式栈,其实很多结构都可以用链表实现,很多书上讲链表很重要,确实;有了线性表和链表作为基础就很容易懂了栈,只要有一个像样的栈代码就能看懂并且理解了;不罗嗦,下面是顺序栈,看代码:#include#define M原创 2013-03-06 11:54:07 · 599 阅读 · 0 评论 -
动态规划
一、基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。二、基本思想与策略 基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能转载 2013-03-14 15:04:38 · 673 阅读 · 0 评论 -
贪心算法
贪心算法一、基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。 贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前转载 2013-03-14 15:07:48 · 744 阅读 · 0 评论 -
分支限界法
分支限界法一、基本描述 类似于回溯法,也是一种在问题的解空间树T上搜索问题解的算法。但在一般情况下,分支限界法与回溯法的求解目标不同。回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。 (1)分支搜索算法 所谓“分转载 2013-03-14 15:11:22 · 877 阅读 · 0 评论 -
回溯法
1、概念 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。 回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。转载 2013-03-14 15:09:51 · 1505 阅读 · 3 评论 -
回溯法解八皇后问题
回溯的概念参见:http://blog.csdn.net/jiecooner/article/details/8673321解释几个地方:解空间树:并非就是一个真正用数据结构造出来的一棵树,当然也可以真的是,不过绝大部分时候不是,因为真正的树时间复杂度和空间复杂度并不是很优的;应该是这样理解:解空间树是抽象的把问题可能的解放置在一个棵树中的叶节点,要找到这个合适的叶节点要从根结点开始深原创 2013-04-01 13:29:06 · 1116 阅读 · 0 评论 -
巴什博弈
什么叫巴什博弈:有一堆n个物品,两个人轮流从中拿取,每次可以拿取1-k件之间,最后取完的那个人胜利;有了定义现在来分析一下如何胜利:定义中说的一次最多拿取k件 ,这里我们动一下脑筋就会得到 ,胜利的条件是这样的推出来的,我们拿取一定数量的物品使得跟对方留下k+1个物品,对方一次拿不完 ,而此时无论对方拿多少, 之后剩下的你都可以一次拿完,ok,你胜利了于是我们扩展一下就是这样的:每次都原创 2013-06-04 09:32:21 · 1155 阅读 · 0 评论 -
筛法求素数
筛法求素数的原理是这样的:比如要求输出1-100以内的素数,利用筛法,定义一个数组p[100];注意:这里我们把0作为假(非素数),1代表真;我们都知道2为素数;我们就从2开始全部初始化为1,快速初始化为1【memset(p,1,sizeof(p))】;注意:后面的很多数我们都初始化为真了,这样所有的数都在一个筛子里面了;然后就开始筛,将不是素数的筛出去,这就是筛法的原原创 2013-03-05 09:49:25 · 738 阅读 · 0 评论 -
中序线索二叉树
就是在中序遍历的时候加上线索,为了区分线索和孩子,要多加两个标志变量ltag,rtag如果标志为true就表明是线索,如果为false就表示孩子;一般规定是将做指针为空的指针域用来存放直接前驱;将有指针为空的指针域用来存放直接后继;当然如果不为空的话就不会用来存放前后继,而是孩子了意思就是存放前继的是左指针,存放后继的是右指针,一般规定这样写,基本思路是新设两个结点,一个头结点原创 2013-04-26 15:20:02 · 1039 阅读 · 0 评论 -
线性表
很像数组,只是把简单的元素换为用户自己定义的结构体,感觉像是对数组的一个扩展;声明一个线性表事先要为其分配一个较大的固定的连续的存储空间,这样就造成内存浪费或者是内存不足,很多时候是内存浪费;因为线性表和数组很相似,所以就继承了数组的一些优点,根据下标可以定向找到一个目标;写一个简单的线性表:#include#include#define M 10000typedef s原创 2013-02-21 14:15:15 · 639 阅读 · 0 评论 -
百度mp3下载链接解密
最近想给QQ空间添加几首背景音乐,所以上百度MP3找音乐链接地址,可是百度MP3现在把音乐链接地址给加密了,音乐链接地址带有“=”,QQ空间是不支持的。查看了百度MP3的网页源码后,发现百度MP3用了比较简单的加密方法,所以要破解百度MP3加密链接是比较简单的。下面就以后弦的《昆明湖》为例,演示一下破解百度MP3加密链接的方法。1、打开http://mp3.baidu.转载 2014-12-12 13:46:58 · 4028 阅读 · 0 评论