
数据结构
pengfoo
这个作者很懒,什么都没留下…
展开
-
【数据结构】循环队列的front,rear指针以及队列满的条件、计算队列长度
循环队列满时,数组中还有一个空的单元。如图4-12-8所示,我们认为,队列已经满了,也就是说,我们不允许出现4-12-7的右图情况出现。 队列满的条件是:(rear+1)%QueueSize == front通用的计算队列长度的公式为:(rear - front+ QueueSize)%QueueSize原创 2012-09-04 09:20:07 · 30502 阅读 · 0 评论 -
【数据结构】根据主定理,计算时间复杂度
前两天校园招聘的笔试,发现趋势科技和微软都考了根据递推式计算时间复杂度的题目,例如:已知某程序的时间复杂度的递推公式为:T(n)=25T(n/5)+n^2,求T(n)?先转网上的主定理,对照主定理,题中a=25,b=5,f(n)=n^2,符合第(2)种情况,因此时间复杂度为O(n^2*Logn)原创 2012-09-24 10:07:13 · 4680 阅读 · 1 评论 -
各种排序算法的特点,时间复杂度,稳定性等
选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。冒泡法: 这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡: 复杂度为O(n*n)。当数据为正序,将不会有交换。复杂度为O(0)。直接插入排序:O(n*n)选择排序:O(n*n)快速排序:平均时间复杂度log2(n)*转载 2012-09-17 21:56:39 · 2238 阅读 · 0 评论 -
【数据结构】网易2012校园招聘题目--平衡二叉树的插入问题
平衡二叉树的插入问题参考:http://www.cnblogs.com/fornever/archive/2011/11/15/2249492.html文章中,将平衡二叉树的插入问题,归结为四种情形。分别是左左,右右,左右,右左。这里的意思是:(1)左左:在一个结点的左孩子的左孩子上插入了一个结点,导致平衡破坏。 a结点有右孩子d,那要进行x和a变换,那么a的右孩子放哪原创 2012-10-06 20:14:23 · 2349 阅读 · 1 评论 -
【数据结构】堆排序
参考一篇文章:http://www.cnblogs.com/dolphin0520/archive/2011/10/06/2199741.html另外,在下面的链接下还有动画演示:http://sjjp.tjuci.edu.cn/sjjg/DataStructure/DS/web/flashhtml/duipaixu.htm 下面是源代码:/*堆排序(大顶堆) 2011.9原创 2012-09-15 11:32:34 · 1488 阅读 · 0 评论 -
【数据结构】创建二叉树的方法
创建普通二叉树的方法:具体可以看代码://交谈中请勿轻信汇款、中奖信息、陌生电话,勿使用外挂软件。//#include using namespace std;typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild;}BiTNode;BiTNode *CreateBinTree (){原创 2012-10-05 17:11:01 · 1636 阅读 · 0 评论 -
斐波那契查找
与二分查找相比,斐波那契查找算法的明显优点在于它只涉及加法和减法运算,而不用除法。因为除法比加减法要占去更多的机时,因此,斐波那契查找的平均性能要比折半查找好。 参考文章:http://blog.youkuaiyun.com/zpluw/article/details/7757331下面给出源代码实现:/*斐波那契查找法,前提是线性表必须有序,时间复杂度是O(logn)*/#includ原创 2012-09-16 10:56:41 · 1273 阅读 · 0 评论 -
【数据结构】折半查找(二分查找)
折半搜索,也称二分查找算法、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。下面的代码给出了两种方法实现了该算法。原创 2012-09-15 21:03:13 · 2436 阅读 · 1 评论 -
【数据结构】快速排序
参考维基百科:快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。步骤为:从数列中挑出一个元素,称为 "基准"(pivot),重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partiti原创 2012-09-15 19:35:58 · 741 阅读 · 0 评论 -
【数据结构】归并排序
归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。(维基百科)参考文章:http://blog.youkuaiyun.com/morewindows/article/details/6678165下面是具体代码:#include #define true 1#d原创 2012-09-15 17:19:49 · 757 阅读 · 0 评论 -
【数据结构】希尔排序
希尔排序的原理参见,维基百科,http://zh.wikipedia.org/wiki/希尔排序,这里给出源代码。#includevoid ShellSort(int a[], int n){ int i,j,k,temp,gap; int gaps[]={1,5,13,43,113,297,815,1989,4711,11969,27901,84801, 21333原创 2012-09-13 12:00:37 · 1779 阅读 · 0 评论 -
【数据结构】递归实现链表逆序
关于本篇文章,先参见本人之前的一篇博客,与之相关:http://blog.youkuaiyun.com/kuzuozhou/article/details/7451289另外,参考:http://blog.youkuaiyun.com/ssjhust123/article/details/7754103 #include #include typedef struct node//节点存放一个数原创 2012-10-01 17:00:36 · 1541 阅读 · 0 评论 -
【数据结构】直接插入排序
#include //#include void InsertSort(int a[], int n){ int i,j,t; for( i=1 ;i<n; i++) { t = a[i]; j = i-1; while( j>=0 && t<a[j]) { a[j+1] = a[j]; j--; } a[j+1]原创 2012-09-12 19:15:06 · 921 阅读 · 0 评论 -
【数据结构】冒泡排序
#include //#include void swap(int *a,int* b){ int tmp; tmp = *a; *a = *b; *b = tmp;}void BubbleSort(int *p, int n){ int i,j; for(i=0; i<n ;i++) { for( j=n-1; j >= i; j原创 2012-09-12 11:16:12 · 1070 阅读 · 0 评论 -
【数据结构】选择排序
#include //#include void swap(int *a,int* b){ int tmp; tmp = *a; *a = *b; *b = tmp;}//void BubbleSort(int *p, int n)//{// int i,j;// for(i=0; i<n ;i++)// {// for( j=n-原创 2012-09-12 15:01:20 · 712 阅读 · 0 评论 -
最小生成树之普里姆算法
算法的动画演示执行过程,参见网页http://www.java3z.com/cwbwebhome/article/article8/83551.html?id=4627原创 2012-09-11 16:17:08 · 1158 阅读 · 0 评论 -
字符串匹配KMP算法初探
先来看基本的串的匹配算法。给定一父串和一子串,判断子串是否匹配父串,匹配则返回父串开始匹配处的坐标,不匹配则返回-1.可配合下面的过程图看代码:#include #include int Index(char s[], char t[], int pos)//s存放父串,t放子串。{ int i,j,slen,tlen;//i,j代表游标,分别指向父原创 2012-09-05 15:38:07 · 689 阅读 · 0 评论 -
将中缀表达式转换为后缀表达式的简便方法
参考文献:颜晶晶 张涛《将中缀表达式转换成后缀表达式的三种方法》http://blog.youkuaiyun.com/glldc/article/details/1818787第一种:利用栈来实现,该方法为常规方法,论文中也有介绍,但本人认为,该方法不利于记忆,且费时,不足以应付考试的要求。再此不再赘述。第二种:后序遍历二叉树法:例:将中缀表达式a+(b-c)*d转换成后缀表达式第一步:画原创 2012-09-03 21:33:08 · 3478 阅读 · 0 评论 -
微软面试题,将二叉排序树转换成双向链表
题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 比如将二元查找树 10 / \ 6原创 2012-09-25 11:32:21 · 1558 阅读 · 0 评论