随笔分类 -  数据结构及算法

败者树原理
摘要:2个子结点比较后的败者放入它们的父结点,而胜者送到它们父结点的父节点去再作比较,这才是败者树。b[0]放的是最终的胜者。 阅读全文
posted @ 2011-02-22 10:56 怂QQ 阅读(3475) 评论(0) 推荐(0) 编辑
找出单向链表的倒数第m个元素
摘要:相对于双向链表来说,单向链表只能从头到尾依次访问链表的各个节点,所以如果要找链表的倒数第m个元素也只能从头到尾进行查找,在查找的过程中,设定两个指针,其中current指针指向当前访问的节点,previous指针指向current之前的节点,且两者之间相距m个节点,这样,当current指针指向最后一个节点时,那previous指针指向的元素就是倒数第m个元素,程序的处理过程如下:node*Fin... 阅读全文
posted @ 2009-12-30 21:15 怂QQ 阅读(1280) 评论(0) 推荐(0) 编辑
全排列的算法与C语言实现
摘要:全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个。现以{1, 2, 3, 4, 5}为例说明如何编写全排列的递归算法。1、首先看最后两个数4, 5。 它们的全排列为4 5和5 4, 即以4开头的5的全排列和以5开头的4的全排列。由于一个数的全排列就是其本身,从而得到以上结果。2、再看后三个数3, 4, 5。它们的全排列为3 4 5、3 5 4、 4 3 5、 4 5 3、... 阅读全文
posted @ 2009-12-06 23:14 怂QQ 阅读(1426) 评论(0) 推荐(0) 编辑
常用排序算法
摘要:1.插入排序由N-1趟排序组成,对于p=1到p=N-1趟,插入排序保证从位置0到位置p上的元素为已排序状态。时间复杂度:O(N^2)代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--voidInsertionSort(ElementTypeA[],... 阅读全文
posted @ 2009-12-02 23:43 怂QQ 阅读(486) 评论(0) 推荐(0) 编辑
如何判断两个单向链表是否有相交,并找出交点
摘要:如果两个单向链表相交,一定是形成Y字形,而不会是X字形。基于这个想法,可以判断两链表是否相交。[代码] 阅读全文
posted @ 2009-12-01 16:05 怂QQ 阅读(1604) 评论(0) 推荐(0) 编辑
单向链表的反转
摘要:比如一个链表是这样的: 1->2->3->4->5 通过反转后成为5->4->3->2->1。 最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转后,利用已经存储的指针往后面继续遍历。源代码如下:代码 Code highlighting produced by Actipro Code... 阅读全文
posted @ 2009-11-30 23:33 怂QQ 阅读(374) 评论(0) 推荐(0) 编辑
常用数据结构
摘要:1. 链表链表可以使用数组实现,也可以使用指针实现。用数组实现的链表的插入、删除操作需要O(N)的时间复杂度,很少使用。用指针实现的链表,插入删除操作可以O(1)时间完成。CodeCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->链表结点定义structNode{ElementTypeElement;Node*Next;};链表常用操作intIsEmpty(Node*L);intIsLast(Node*L);Node*Find(ElementT 阅读全文
posted @ 2009-11-19 22:11 怂QQ 阅读(439) 评论(0) 推荐(0) 编辑
二叉树创建及遍历算法(递归及非递归)
摘要://二叉树处理头文件//包括二叉树的结构定义,二叉树的创建,遍历算法(递归及非递归),/*作者:成晓旭时间:2001年10月7日(18:49:38-20:00:00)内容:完成二叉树创建,二叉树的前,中,后序遍历(递归)时间:2001年10月7日(21:09:38-22:09:00)内容:完成二叉树的前,中序遍历(非递归)时间:2001年10月8日(10:09:38-11:29:00)内容:完成查... 阅读全文
posted @ 2009-11-15 16:17 怂QQ 阅读(3160) 评论(0) 推荐(1) 编辑
二叉树的深度优先和广度优先遍历
摘要:图的深度优先搜索法是树的先根遍历的推广,它的基本思想是:从图G的某个顶点v0出发,访问v0,然后选择一个与v0相邻且没被访问过的顶点vi访问,再从vi出发选择一个与vi相邻且未被访问的顶点vj进行访问,依次继续。如果当前被访问过的顶点的所有邻接顶点都已被访问,则退回到已被访问的顶点序列中最后一个拥有未被访问的相邻顶点的顶点w,从w出发按同样的方法向前遍历,直到图中所有顶点都被访问。图的广度优先搜索是树的按层次遍历的推广,它的基本思想是:首先访问初始点vi,并将其标记为已访问过,接着访问vi的所有未被访问过的邻接点vi1,vi2, …, vi t,并均标记已访问过,然后再按照vi1,vi2, … 阅读全文
posted @ 2009-10-20 21:14 怂QQ 阅读(5228) 评论(2) 推荐(0) 编辑
算法的时间复杂度和空间复杂度
摘要:常用的算法的时间复杂度和空间复杂度排序法 最差时间分析平均时间复杂度 稳定度 空间复杂度 冒泡排序O(n2)O(n2) 稳定 O(1) 快速排序O(n2)O(n*log2n) 不稳定 O(log2n)~O(n) 选择排序O(n2)O(n2) 稳定 O(1) 二叉树排序O(n2)O(n*log2n) 不一顶 O(n) 插入排序 O(n2)O(n2) 稳定 O(1) 堆排序O(n*log2n) O(n... 阅读全文
posted @ 2009-10-20 21:10 怂QQ 阅读(66530) 评论(0) 推荐(9) 编辑
C++ STL基本容器比较
摘要:在STL中基本容器有: string、vector、list、deque、set、mapset 和map都是无序的保存元素,只能通过它提供的接口对里面的元素进行访问set:集合, 用来判断某一个元素是不是在一个组里面,使用的比较少map:映射,相当于字典,把一个值映射成另一个值,如果想创建字典的话使用它好了string、vector、list、deque、set 是有序容器 1.string st... 阅读全文
posted @ 2009-10-05 10:57 怂QQ 阅读(725) 评论(0) 推荐(0) 编辑
排序算法全分析
摘要:排序简介 排序是数据处理中经常使用的一种重要运算,在计算机及其应用系统中,花费在排序上的时间在系统运行时间中占有很大比重;并且排序本身对推动算法分析的发展也起很大作用。目前已有上百种排序方法,但尚未有一个最理想的尽如人意的方法,本章介绍常用的如下排序方法,并对它们进行分析和比较。1、插入排序(直接插入排序、折半插入排序、希尔排序);2、交换排序(起泡排序、快速排序);3、选择排序(直接选择排序、堆... 阅读全文
posted @ 2009-09-28 17:02 怂QQ 阅读(560) 评论(0) 推荐(0) 编辑
C语言栈实现逆波兰算法
摘要:逆波兰式也叫后缀表达式(将运算符写在操作数之后) 如:我们平时写a+b,这是中缀表达式,写成后缀表达式就是:ab+ 先说明一下里面用到的基础1.atof() 把字符串指针转化为浮点数2.getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从st... 阅读全文
posted @ 2009-09-22 10:12 怂QQ 阅读(1460) 评论(0) 推荐(0) 编辑