- 博客(79)
- 资源 (3)
- 收藏
- 关注
原创 2-3-4树实现
//==================2-3-4树的异常处理类=========================#ifndef TWO_THREE_FOUR_TREE_EXCEPTION_H_#define TWO_THREE_FOUR_TREE_EXCEPTION_H_#include#includeclass TtfTreeException:public std::logic_e
2011-12-03 18:47:44
605
原创 avl树实现
//=================avl 的异常处理类=======================//============== avl_tree_exception.h=====================#ifndef AVL_TREE_EXCEPTION_H_#define AVL_TREE_EXCEPTION_H_#include#includeclass ATEx
2011-12-02 00:16:07
1385
3
原创 无法解析的外部符号
下午写了个模板类的小程序,在编译的时候出现了“无法解析的外部符号”的链接错误:1> LINK : 没有找到 D:\ProgramData\VS2010Project\avl_tree\Debug\avl_tree.exe 或上一个增量链接没有生成它;正在执行完全链接1>tesk.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall AvlTr
2011-12-01 23:34:28
3283
原创 无法解析的外部符号
下午写了个模板类的小程序,在编译的时候出现了“无法解析的外部符号”的链接错误用g++编译则错误信息如下:经过几番修改尝试,都未找到症结所在。回头想想,由于对模板不是太熟,应该是在模板上出现了问题吧。网上查找了一番,还果真如此:下面是摘抄网友的解决方法1. 干脆直接使用包含模式,即将模板类的定义与实现同写在.h文件中。(我不太喜欢这种写法)2. 使用分离模式,但是在使用时不引用模
2011-12-01 23:19:41
233
原创 2-3树的实现初探
前篇文章(2-3树的实现分析)已经分析了2-3树的遍历(traverse),检索(retrieve),插入(insert)和删除(delete)的算法,经过三天的努力,我在分析的基础上采用回溯的方式实现了2-3树,由于还在初级阶段,肯定会出现不少的问题,请多赐教。但经过测试,运行还算正确。下面是代码实现:2-3树的异常处理类//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2011-11-25 12:41:45
1061
原创 2-3树的实现初探
前面的2-3树实现分析已经分析了2-3树的遍历(traverse),检索(retrieve),插入(insert)和删除(delete)的算法,经过三天的努力,我在分析的基础上采用回溯的方式实现了2-3树,由于还在初级阶段,肯定会出现不少的问题,请多赐教。但经过测试,运行还算正确。下面是代码实现:2-3树的异常处理类//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2011-11-25 11:31:26
144
原创 2-3树实现分析
在2-3树中,每个内部节点(非叶子节点)有两个或三个孩子,而且所有叶子都在同一级别上。例如,图1显示高度为3的2-3树。包含两个孩子的节点称为2-节点,二叉树中的节点都是2-节点;包含三个孩子的节点称为3-节点。
2011-11-21 23:23:06
4210
2
原创 2-3 树的实现分析
在2-3树中,每个内部节点(非叶子节点)有两个或三个孩子,而且所有叶子都在同一级别上。例如,图1显示高度为3的2-3树。包含两个孩子的节点称为2-节点,二叉树中的节点都是2-节点;包含三个孩子的节点称为3-节点。图1:高度为3的2-3树2-3树不是二叉树,其节点可拥有3个孩子。不过,2-3树与满二叉树相似。若某棵2-3树不包含3-节点,则看上去像满二叉树,其所有内部节点都可有两个孩子,
2011-11-21 22:41:10
426
原创 二叉查找树(binary search tree)的实现
二叉查找树的实现继承了 二叉树的实现。//二叉查找树的头文件#ifndef SEARCH_TREE_H_#define SEARCH_TREE_H_#include"tree_exception.h"#include"binary_tree.h"class SearchTree :public BinaryTree{ public: SearchTree();
2011-11-17 22:59:52
778
原创 二叉查找树(binary search tree)的实现算法分析
此文为《data abstraction and problem solving with c++》的读书笔记 。这里有个图书管理系统模拟的应用实例 树中的每一个节点包含特定人员的数据。人名是查找关键字,是可在图中看到的唯一的数据项。下面的c++语句描述了树节点中的数据:#includeusing namespace std;typedef string keyType
2011-11-17 22:33:15
3429
原创 二叉树
//二叉树类的异常处理类#ifndef TREE_EXCEPTION_H_#define TREE_EXCEPTION_H_#include#includeclass TreeException :public std::logic_error{ public: TreeException(const std::string &message="") :s
2011-11-17 21:22:12
595
原创 基于堆的优先队列的实现
优先队列的异常处理类#ifndef PQUEUEEXCEPTION_H_#define PQUEUEEXCEPTION_H_#include#includeclass PQueueException :public std::logic_error{ public: PQueueException(const std::string &message="")
2011-11-17 00:06:32
1504
1
原创 堆排序的c++实现
#includeusing namespace std;void heapRebuild(int arr[],int root,int size);void heapSort(int arr[],int size);int main(){ const int SIZE=10; int arr[SIZE]={10,2,13,41,23,52,7,31,65,90};
2011-11-16 23:53:36
7970
原创 堆排序
顾名思义,堆排序算法使用堆来排序无序的anarray数组。首先,算法将数组转换为堆。为完成转换,一种方法是使用heapInsert函数,将项逐一入堆。 还有一种方法有数组anArray的项构建堆,这种方法的效率更高。假设anArray的原始内容如图1-a所示。将数组anArray的项指派给树的节点,从根开始,从左到右,逐渐下移将数组视为二叉树。结果如图1-b所示。此后,反复调用hea
2011-11-16 23:51:38
1054
原创 堆(heap)基于数组的实现
定义堆类的异常处理类#ifndef HEAP_EXCEPTION_H_#define HEAP_EXCEPTION_H_#include#includeclass HeapException:public std::logic_error{ public: HeapException(const std::string &message="") :std:
2011-11-16 23:36:32
1385
原创 堆(heap)的定义及其算法分析
堆(heap)是与二叉查找树类似的ADT。但又不同于二叉查找树,主要体现在两个方面。第一,可将二叉查找树看着是有序的,而堆是有序的,这一概念较弱。不过,为使优先队列操作有效执行,这完全满足要求。第二,二叉查找树有多种不同形状,而堆总是完全二叉树。 堆是完全二叉树,可以为空,或者: (1)根包含的查找关键字大于或等于各个孩子的查找关键字。 (2)根包含作为子树的堆
2011-11-16 23:22:29
4083
原创 堆(heap)的定义及其算法分析
堆(heap)是与二叉查找树类似的ADT。但又不同于二叉查找树,主要体现在两个方面。第一,可将二叉查找树看着是有序的,而堆是有序的,这一概念较弱。不过,为使优先队列操作有效执行,这完全满足要求。第二,二叉查找树有多种不同形状,而堆总是完全二叉树。堆是完全二叉树,可以为空,或者: (1)根包含的查找关键字大于或等于各个孩子的查找关键字。 (2)根包含作为子树的堆。在这
2011-11-16 22:42:37
185
原创 STL 关联容器
关联容器的定义 STL中的关联容器有map、multimap、set、multiset。 Map类存储(键,值)时,他们按照唯一的键来排序。Pair在中定义。Map的一个有效地功能是可使用运算符[]通过其键来建立下标。由于下标功能在map中提供,所以值可以通过insert函数输入到map中,还可以通过数组类型的赋值来输入,例如下面的语句: Month["December"
2011-11-16 22:38:38
245
原创 STL的priorit_queue类
STL提供了priority_queue类,它是一个适配器容器。默认的基本容器类型是vector。priority_queue可以插入元素,但不能遍历元素。只能访问最上面的元素。元素在队列中出入时。会把优先级最高的元素放在队首,优先级最高的元素通过默认运算符template, class Compare=less>class priority_queue{ public:
2011-11-16 22:28:48
242
原创 STL查找算法实例
#include#include#include#include#includeusing namespace std;int main(){ //create a vector of strings vector s; vector::iterator iter1; vector::iterator iter2; s.push_back("ju
2011-11-16 22:18:31
407
原创 STL查找算法
标准模板库提供了一组在有序范围内查找元素的操作。这些函数都是假设,除非将比较函数的对象给定位最后一个参数,否则就使用运算符 如果指定的值出现在排序范围内,Binary_search函数就会返回true。其他算法用于查找同样的排序范围。Lower_bound函数返回指向给定值第一次出现位置的迭代器,upper_bound函数返回指向指定值最后一次出现未知的迭代器。如果没有找到该值,他们
2011-11-16 21:57:59
971
原创 h
#ifndef TWO_THREE_FOUR_EXCEPTION_H_#define TWO_THREE_FOUR_EXCEPTION_H_#include#includeclass TTFTException :public std::logic_error{ public: TTFTException(const std::string &message="")
2011-11-16 20:30:08
64
原创 慝
#ifndef TWO_THREE_FOUR_EXCEPTION_H_#define TWO_THREE_FOUR_EXCEPTION_H_#include#includeclass TTFTException :public std::logic_error{ public: TTFTException(const std::string &message="")
2011-11-16 20:16:06
53
原创 f
#ifndef TWO_THREE_FOUR_EXCEPTION_H_#define TWO_THREE_FOUR_EXCEPTION_H_#ifndef TWO_THREE_FOUR_EXCEPTION_H_#define TWO_THREE_FOUR_EXCEPTION_H_#include#includeclass TTFTException :public std:
2011-11-16 18:43:36
64
原创 yty
[code=C++] #ifndef TWO_THREE_FOUR_EXCEPTION_H_#define TWO_THREE_FOUR_EXCEPTION_H_#include#includeclass TTFTException :public std::logic_error{ public: TTFTException(const std::string
2011-11-16 18:31:05
67
原创 hia
#ifndef HEAP_EXCEPTION_H_#define HEAP_EXCEPTION_H_#include#includeclass HeapException:public std::logic_error{ public: HeapException(const std::string &message="") :std::logic_error
2011-11-14 19:51:25
122
原创 nijh
#ifndef HEAP_EXCEPTION_H_#define HEAP_EXCEPTION_H_#include#includeclass HeapException:public std::logic_error{ public: HeapException(const std::string &message="") :std::logic_error
2011-11-14 16:40:12
109
原创 hni
#ifndef HEAP_EXCEPTION_H_#define HEAP_EXCEPTION_H_#include#includeclass HeapException:public std::logic_error{ public: HeapException(const std::string &message="") :std::logic_error
2011-11-14 16:26:39
79
原创 二叉查找树( binary search tree)
树中的每一个节点包含特定人员的数据。人名是查找关键字,是可在图中看到的唯一的数据项。下面的c++语句描述了树节点中的数据:#includeusing namespace std;typedef string keyType;class KeyItem{ public: KeyItem(); KeyItem(const KeyType &keyValue)
2011-11-04 10:45:28
113
转载 Making Your C++ Code Robust(让你的c++代码变得更强大)
IntroductionWhen your C++ program grows in size, it becomes difficult to keep track of its components, and it's easier to introduce bugs. So it is important to realize that some rules should be foll
2011-10-31 11:49:51
381
原创 STL排序函数运用
#include#include#include#includeusing namespace std;const int SIZE=25;int main(){ //create four vector for sorting algorithm vector v1; vector v2; vector v3(SIZE); vector v4(SIZE); vector
2011-10-29 17:56:59
383
原创 STL排序函数
标准模板库(STL)在库头文件中提供了几个排序函数。STL类List就有自己的内置的sort函数。对容器来说,List的sort函数比一般的排序算法快,因为它对列表进行了优化,而且是交换指针,不是复制对象。在排序双向队列、字符串、数组、或矢量时,使用一般的sort函数,注意这个sort函数不稳定,值相同的元素不能保证处于相同的顺序位置上,为此应使用stable_sort函数。只有在需要对一个区域的
2011-10-29 17:54:54
1112
原创 快速排序(quick sort)
快速排序 如图显示该分区,它具有以下属性:S1=theArray[first....poivotIndex-1]分区的所有项都小于枢轴项p,而S2=theArray[pivotIndex+1 .....last]的所有项大于等于p。这个属性并未说明数组已经完成排序,但指出一个重要的事实:在正确排序数组后,虽然位置first到pivotIndex-1的元素的相对位置可能变化,但依然
2011-10-29 17:37:14
607
原创 归并排序(merge sort)
归并排序 归并排序是一种递归排序算法,无论数组元素的原始顺序如何,其性能恒定不变。将数组一分为二,分别排序两部分元素,再将有序的两半数组归并为一个有序数组。归并步骤比较数组前一半的元素与数组的后一半元素,并将较小元素移到临时数组,该过程继续前进,直到其中一半再没有元素为止。此后只需将其余元素移到临时数组即可。最后将临时数组复制到原始数组。#includeusing nam
2011-10-29 17:35:00
550
原创 插入排序(insertion sort)
插入排序 这个插入排序版本将数组分成两个区域。已排序区域和未排序区域。开始时,整个数组是未排序区域,就像放在牌桌上面的一叠没有排序的扑克。在每一步,插入排序取出未排序区域的第一项,并放入排序区域的适当位置。此操作类似于在桌上去一张牌,并插入手上适当位置。第一步很简单:将数组第一项从未排序区域移到已排序区域,不必移动数据。因此这步骤可以忽略。将数组第一项视为原始排序区域,将数组其余
2011-10-29 17:33:05
366
原创 起泡排序(bubble sort)
起泡排序 起泡排序比较相邻元素,若为逆序,则交换元素,这种排序一般需要多次遍历数据。在第一次便利中,比较数组前两项,若为逆序,则进行交换;则比较下一对元素,即数组位置2和位置3,若为逆序,则进行交换,继续此过程,每次比较和交换两个元素,直到数组结束。#includeusing namespace std;void sort(int arr[],int size);
2011-10-29 17:30:12
448
原创 选择排序(selection sort)
选择排序。 为升序排列数组,必须首先找到最大元素。要使最大元素移至数组最后一位,应交换最后一个元素与最大元素,即使两个元素正好相等,也是如此。现在,忽略数组的最后一个(最大)元素,在数组其余部分查找最大元素,并交换最大元素和最后一个元素(即原始数组的倒数第二个元素)。这个过程一直进行,直到选择和交换了数组n个元素中的n-1个元素。剩余一个元素在数组的第一个位置,已在适当的位置。
2011-10-29 17:27:37
360
原创 大O表示法
如果算法A需要的时间与f(n)成正比,则算法A成为f(n)阶,表示为O(f(n))。函数f(n)称为算法的增率函数(growth-rate function)。该表示法使用大写字母O来表示(order),故称大O表示法。若规模为n的问题需要的时间与n成正比,则问题表示为O(n),即n阶。若需要的时间与n^2成正比,则问题表示为O(n^2),以此类推。下面是算法的阶的定义。 若
2011-10-29 17:24:33
1957
1
转载 C++运算符重载
所谓多态性是指发出同样的消息被不同类型的对象接收时导致完全不同的行为。这里所说的消息主要是指对类的成员函数的调用,而不同的行为是指不同的实现。利用多态性,用户只需发送一般形式的消息,而将所有的实现留给接收消息的对象。对象根据所接收到的消息而做出相应的动作(即操作)。 函数重载和运算符重载是简单一类多态性。 所谓函数重载简单地说就是赋给同一个函数名多个含义。具体地讲,C++中允许在相同的
2011-10-26 22:38:05
388
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人