数据结构
LovingWind2011
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Vector::Vector的定义
typedef int Rank; //秩#define DEFAULT_CAPACITY 3 //默认的初始容量(实际应用中可设置为更大)template <typename T> class Vector { //向量模板类protected: Rank _size; int _capacity; T* _elem; //规模、容量、数据区 void copyFrom(T c原创 2015-05-17 22:15:26 · 883 阅读 · 0 评论 -
Queue::定义
Queue继承于List:#include "../List/List.h" //以List为基类template <typename T> class Queue: public List<T> { //队列模板类(继承List原有接口)public: //size()、empty()以及其它开放接口均可直接沿用 void enqueue(T const& e) { insertAsLa原创 2015-05-31 10:20:13 · 793 阅读 · 0 评论 -
BinTree::构造、析构、插入、删除
构造析构: BinTree() : _size(0), _root(NULL) { } //构造函数 ~BinTree() { if (0 < _size) remove(_root); } //析构函数插入: BinNodePosi(T) insertAsRoot(T const & e); //插入根节点 BinNodePosi(T) insertAsLC(BinNodePo原创 2015-06-01 15:45:39 · 2001 阅读 · 0 评论 -
GraphMatrix::图的定义
图的抽象基类:typedef enum { UNDISCOVERED, DISCOVERED, VISITED } VStatus; //顶点状态typedef enum { UNDETERMINED, TREE, CROSS, FORWARD, BACKWARD } EStatus; //边状态template <typename Tv, typename Te> //顶点类型、边类型clas原创 2015-06-02 14:02:58 · 1771 阅读 · 0 评论 -
GraphMatrix::构造、析构、插入、删除
构造析构: GraphMatrix() { n = e = 0; } //构造 ~GraphMatrix() { //析构 for (int j = 0; j < n; j++) //所有动态创建的 for (int k = 0; k < n; k++) //边记录 delete E[j][k]; //逐条清除 }插入删除顶点:原创 2015-06-02 14:49:25 · 1387 阅读 · 0 评论 -
BinTree::遍历
template <typename VST> //操作器 void travLevel(VST& visit) { if (_root) _root->travLevel(visit); } //层次遍历 template <typename VST> //操作器 void travPre(VST& visit) { if (_root) _root->travPre(visit原创 2015-06-01 16:46:00 · 1143 阅读 · 0 评论 -
GraphMatrix::BFS广度优先搜索
查找某一结点的邻居: virtual int firstNbr(int i) { return nextNbr(i, n); } //首个邻接顶点 virtual int nextNbr(int i, int j) //相对于顶点j的下一邻接顶点 { while ((-1 < j) && (!exists(i, --j))); return j; } //逆向线性试探(改用邻接表可提原创 2015-06-05 11:52:58 · 841 阅读 · 0 评论 -
GraphMatrix::DFS深度优先搜索
template <typename Tv, typename Te> //深度优先搜索DFS算法(全图)void Graph<Tv, Te>::dfs(int s) { //assert: 0 <= s < n reset(); int clock = 0; int v = s; //初始化 do //逐一检查所有顶点 if (UNDISCOVERED == status原创 2015-06-05 16:02:51 · 840 阅读 · 0 评论 -
Vector::去重、置乱
无序去重:template <typename T> int Vector<T>::deduplicate() { //删除无序向量中重复元素(高效版) int oldSize = _size; //记录原规模 Rank i = 1; //从_elem[1]开始 while (i < _size) //自前向后逐一考查各元素_elem[i] (find(_elem[i]原创 2015-05-25 14:27:34 · 1436 阅读 · 0 评论 -
Vector::sort排序
template <typename T> void Vector<T>::sort(Rank lo, Rank hi) { //向量区间[lo, hi)排序 switch (rand() % 5) { //随机选取排序算法。可根据具体问题的特点灵活选取或扩充 case 1: bubbleSort(lo, hi); break; //起泡排序 case 2: sel原创 2015-05-24 21:48:41 · 778 阅读 · 0 评论 -
Stack::定义
借助Vector实现栈,栈顶是向量末尾,栈底是向量起始:#include "../Vector/Vector.h" //以向量为基类,派生出栈模板类template <typename T> class Stack: public Vector<T> { //将向量的首/末端作为栈底/顶public: //size()、empty()以及其它开放接口,均可直接沿用 void push(T原创 2015-05-29 15:05:37 · 1140 阅读 · 0 评论 -
BinTree::定义
二叉树结点定义:#define BinNodePosi(T) BinNode<T>* //节点位置#define stature(p) ((p) ? (p)->height : -1) //节点高度(与“空树高度为-1”的约定相统一)typedef enum { RB_RED, RB_BLACK} RBColor; //节点颜色template <typename T> struct BinNo原创 2015-05-31 13:18:30 · 2737 阅读 · 0 评论 -
Vector::构造,复制构造,析构
构造函数:// 构造函数 Vector(int c = DEFAULT_CAPACITY, int s = 0, T v = 0) //容量为c、规模为s、所有元素初始为v { _elem = new T[_capacity = c]; for (_size = 0; _size < s; _elem[_size++] = v); } //s <= c复制构造函数:从A数组中为[lo,h原创 2015-05-17 22:37:46 · 1287 阅读 · 0 评论 -
Vector::traverse遍历
对Vector元素进行遍历,将遍历结果交由传递的函数使用:template <typename T> void Vector<T>::traverse(void (*visit)(T &)) //利用函数指针机制的遍历{ for (int i = 0; i < _size; i++) visit(_elem[i]); }template <typename T> template <typenam原创 2015-05-21 14:38:16 · 3438 阅读 · 1 评论 -
List::去重,倒置
无序去重:template <typename T> int List<T>::deduplicate() { //剔除无序列表中的重复节点 if (_size < 2) return 0; //平凡列表自然无重复 int oldSize = _size; //记录原规模 ListNodePosi(T) p = header; Rank r = 0; //p从首节点开始 wh原创 2015-05-29 14:46:09 · 1019 阅读 · 0 评论 -
List::定义
结点的定义:typedef int Rank; //秩#define ListNodePosi(T) ListNode<T>* //列表节点位置template <typename T> struct ListNode { //列表节点模板类(以双向链表形式实现)// 成员 T data; ListNodePosi(T) pred; ListNodePosi(T) succ; //数值、前原创 2015-05-28 16:19:52 · 1532 阅读 · 0 评论 -
List::insert remove
各种插入操作:template <typename T> //将e紧靠当前节点之前插入于当前节点所属列表(设有哨兵头节点header)ListNodePosi(T) ListNode<T>::insertAsPred(T const & e) { ListNodePosi(T) x = new ListNode(e, pred, this); //创建新节点 pred->succ =原创 2015-05-28 22:44:15 · 804 阅读 · 0 评论 -
List::traverse遍历
声明:// 遍历 void traverse(void (*)(T&)); //遍历,依次实施visit操作(函数指针,只读或局部性修改) template <typename VST> //操作器 void traverse(VST&); //遍历,依次实施visit操作(函数对象,可全局性修改)定义:template <typename T> void List<T>::tra原创 2015-05-28 23:01:38 · 10560 阅读 · 0 评论 -
List::构造、复制构造、析构
构造函数:默认构造函数: 构造一个空列表:template <typename T> void List<T>::init() { //列表初始化,在创建列表对象时统一调用 header = new ListNode<T>; //创建头哨兵节点 trailer = new ListNode<T>; //创建尾哨兵节点 header->succ = trailer; header-原创 2015-05-28 22:32:11 · 1104 阅读 · 0 评论 -
List::sort排序
template <typename T> void List<T>::sort(ListNodePosi(T) p, int n) { //列表区间排序 switch (rand() % 3) { //随机选取排序算法。可根据具体问题的特点灵活选取或扩充 case 1: insertionSort(p, n); break; //插入排序 case 2: sele原创 2015-05-29 14:24:19 · 828 阅读 · 0 评论 -
List::find、search
无序查找:template <typename T> //在无序列表内节点p(可能是trailer)的n个(真)前驱中,找到等于e的最后者ListNodePosi(T) List<T>::find(T const& e, int n, ListNodePosi(T) p) const { //0<=n<=rank(p)<_size while (0 < n--) //对于p的最近的n个前驱,原创 2015-05-29 14:50:35 · 808 阅读 · 0 评论 -
Vector::find、search查找
无序向量区间查找:template <typename T> //无序向量的顺序查找:返回最后一个元素e的位置;失败时,返回lo - 1Rank Vector<T>::find(T const & e, Rank lo, Rank hi) const { //assert: 0 <= lo < hi <= _size while ((lo < hi--) && (e != _elem[hi]原创 2015-05-25 15:39:42 · 1378 阅读 · 0 评论
分享