
数据结构
文章平均质量分 79
Microsues
现就读于南京邮电大学信号与信息处理专业
展开
-
链表——用C++模板实现
<br />LinkedList.h<br />//单向链表的实现//查找、插入和移除某个元素、复制、清空单向链表的时间复杂度均为O(n)//设计类时,应尽量减少类的成员函数之间的依赖关系#ifndef LINKEDLIST_H#define LINKEDLIST_Htemplate<class DT>struct Node{ DT info; Node<DT> *next;};template<class DT>class LinkedList{pu原创 2010-12-29 20:02:00 · 15264 阅读 · 4 评论 -
深度优先搜索与广度优先搜索
原文转自:http://blog.youkuaiyun.com/andyelvis/archive/2007/08/06/1728378.aspx 有两种常用的方法可用来搜索图:即深度优先搜索和广度优先搜索。它们最终都会到达所有连通的顶点。深度优先搜索通过栈来实现,而广度优先搜索通过队列来实现。 深度优先搜索:下面图中的数字显示了深度优先搜索顶点被访问的顺序。为了实现深度优先搜索,首先选择一个起始顶转载 2011-06-13 21:28:00 · 974 阅读 · 0 评论 -
优先级队列——用C++模板实现
<br />PriorityQueue.h<br />//优先级队列基于"堆"(内嵌双向链表)的实现,此时入队和出队的时间复杂度都为O(lgn),// 复制、清空和遍历队列的时间复杂度为O(n) //另外还有一种实现方法是基于"数组"的实现, 此时入队的时间复杂度为O(1),出队的时间复杂度为O(n)//从时间复杂度上讲:基于"堆"(内嵌原创 2010-12-29 20:05:00 · 3581 阅读 · 0 评论 -
队列——用C++模板实现
<br />enqueue.h<br />//用"链表"实现队列//入队和出队的时间复杂度为O(1)//复制、清空和遍历队列的时间复杂度为O(n)template <class DT>struct Node{ DT info; Node<DT> *next;};template <class DT>class Queue{public: Queue(); Queue(const Queue<DT> &apqueue); ~Queue(); Queu原创 2010-12-29 19:59:00 · 1939 阅读 · 0 评论 -
排序1+5:各种排序算法的总结和比较
<br />严重声明:此贴转自http://www.cnblogs.com/FlyingBread/archive/2007/02/02/636993.html,转发请注明出处。<br /> <br /><br />1 快速排序(QuickSort)<br /><br />快速排序是一个就地排序,分而治之,大规模递归的算法。从本质上来说,它是归并排序的就地版本。快速排序可以由下面四步组成。<br /><br />(1) 如果不多于1个数据,直接返回。<br />(2) 一般选择序列最左边的值作为支点数据。<转载 2010-12-30 17:00:00 · 765 阅读 · 0 评论 -
排序1+4:归并排序(MergeSort)和堆排序(HeapSort)
严重声明:此贴转自http://www.cnblogs.com/FlyingBread/archive/2007/01/27/631830.html ,转发请注明出处。1 归并排序(MergeSort)归并排序最差运行时间是O(nlogn),它是利用递归设计程序的典型例子。归并排序的最基础的操作就是合并两个已经排好序的序列。假设我们有一个没有排好序的序列,那么首先我们使用分割的办法将这个序列分割成一个一个已经排好序的子序列。然后再利用归并的方法将一个个的子序列合并成排序好的序列。分割和归并的过程可以看下面的转载 2010-12-30 16:59:00 · 1070 阅读 · 0 评论 -
排序1+3:基数排序(RadixSort),希尔排序(ShellSort)和快速排序(QuickSort)
<br />严重声明:此贴转自http://www.cnblogs.com/FlyingBread/archive/2007/01/31/635123.html ,转发请注明出处。<br /> <br />排序1+3:基数排序(RadixSort),希尔排序(ShellSort)和快速排序(QuickSort)<br />1 基数排序<br /><br />基数排序对于整数特别有效。是一种稳定的算法(意思是相同的数字不会交换关系)。基数排序是根据数字的性质来逐步根据个位数,十位数,百位数分类求得排序结果的方转载 2010-12-30 16:57:00 · 1049 阅读 · 0 评论 -
排序1+1:冒泡排序法(BubbleSort)的改进以及效率比较
严重声明:此贴转自:http://www.cnblogs.com/FlyingBread/archive/2007/01/26/630674.html1 我要冒泡 冒泡排序这个名字对于我们来说实在是过于熟悉了。作为一个程序员,如果敢说出自己不会冒泡排序,结局肯定是会被鄙视到火星上去。许多公司到学校去招聘应届毕业生的时候,都会要求写一个冒泡排序。毫无疑问的,冒泡排序就是算法世界里面的HelloWorld。我选择了一个弱智的开始,不外乎想告诫自己不要以非常弱智的方式结束自己的算法学习之旅。为了不使得自己的文转载 2010-12-30 16:52:00 · 995 阅读 · 0 评论 -
统计排序
<br /> <br />统计排序又称为箱排序(bin sort)或者桶排序(bucked sort)<br /> <br />统计排序的思想:动态创建一个数组,数组中的每个索引对应的值记录"需要排序的数组"与这个索引相等的值的个数<br />统计排序的优点:当数组中值的范围小于元素数量时,统计排序的时间复杂度为O(n)<br /> <br />代码实现:<br />#include<iostream>using namespace std;void countingSort(int arr[],c原创 2010-12-30 17:20:00 · 1596 阅读 · 0 评论 -
排序1+2:交换排序(ExchangeSort),选择排序(SelectSort)和插入排序(Insertsort)
<br />严重声明:此贴转自http://www.cnblogs.com/FlyingBread/archive/2007/01/27/631830.html ,转发请注明出处。<br /> <br /><br />交换排序,插入排序和选择排序都是很简单也很基础的排序算法。在世面上各种各样的算法和数据结构的书中都很轻易地找的到他们的踪影。在这儿写出来不外乎是加深自己的印象,也为有需要的朋友做一个参考。<br /><br />1 交换排序<br /><br />交换排序是一种很简单的排序方法。其主要思想如下转载 2010-12-30 16:55:00 · 1429 阅读 · 0 评论 -
栈——用C++模板实现
<br />Stack.h<br />//用"链表"实现栈//入栈,出栈的时间复杂度为O(1)//复制、清空和遍历栈的时间复杂度为O(n)template<class DT>struct Node{ DT info; Node<DT> *next;};template<class DT>class Stack{public: Stack():top(NULL) {}; Stack(const Stack<DT> &original); ~Stack()原创 2010-12-29 19:56:00 · 3281 阅读 · 3 评论 -
二叉搜索树
写一个二叉搜索树花了不少时间,第一次写还真费劲,感受:1、从搜索树删除一个元素需要考虑的情况真多,每一种情况都要考虑好指针的调整;2、遍历二叉树,递归版本真不好理解,真不知道真么出来的,非递归版本比较好理解。下面是代码 BinaryTree.h//二叉搜索树#includetemplatestruct Node{ T data; Node *pleft; Nod原创 2011-06-17 11:14:00 · 768 阅读 · 0 评论