数据结构笔记
文章平均质量分 88
xunmengpiaoyun
这个作者很懒,什么都没留下…
展开
-
二叉树类和DFS,BFS
#include #include #include using namespace std;// 二叉树节点类template class BiTreeNode{public: BiTreeNode *leftChild; // 左子树指针 BiTreeNode *rightChild; // 右子树指针 T data;转载 2013-11-30 12:10:31 · 2166 阅读 · 0 评论 -
双标记层次次序构建树
利用带双标记层次次序信息,来构造左孩子右兄弟方式表示的树。#include #include using namespace std;const int N = 10; // 结点数量template class Tree; //声明树类// 带“双标记”的次序结点类template class DualTa转载 2013-12-15 10:43:37 · 2335 阅读 · 0 评论 -
树的父指针表示与Union/Find算法实现
用树的类合并两个节点所在的子树#include using namespace std;//类ParTreeNode描述了树的结点定义templateclass ParTreeNode //树结点定义{private: T value; //结点的值转载 2013-12-15 16:07:34 · 2074 阅读 · 0 评论 -
树类的定义和遍历
实现树类的定义,结点的增删,以及先根,后根,层序周游遍历#include #include using namespace std;template class Tree; //声明树类template class TreeNode {friend class Tree;private: T m_Value;转载 2013-12-15 11:10:32 · 1332 阅读 · 0 评论 -
双标记位先根次序构建树
#include #include //#include "TreeNode.h"using namespace std;const int N 10 //结点数量template class Tree; //声明树类// 带“双标记”的先根次序 结点类template class DualTagTreeNode {转载 2013-12-15 10:29:48 · 2388 阅读 · 0 评论 -
图的链式表示
图的链式表示// 图的相邻矩阵表示方法#include #include using namespace std;#define N 5 // 定义图的顶点数///*********** Graph.h ************////图的基类#define UNVISITED 0#define VISITED 1#define INFINITE 0x7fff转载 2014-01-04 15:24:31 · 750 阅读 · 0 评论 -
Floyd 最短路径
Floyd 最短路径算法:循环比较加入新的点之后,两边之后小于第三边。// 图用相邻矩阵表示方法//*****************************************************//这里要注意 图类中的边为无穷大的时候也应该看成是一条边//所以要修改一下IsEdge函数的定义//***************************************转载 2014-01-04 17:28:18 · 619 阅读 · 0 评论 -
Prim 最小生成树
Prim 最小生成树:从顶点出发,依次添加和当前点相连中最短边对应的定点。// 图的相邻矩阵表示方法,还要用到最小值堆#include #include #define UNVISITED 0#define VISITED 1#define INFINITY 9999#define N 7 // 定义图的顶点数using namespace std;//Gra转载 2014-01-04 18:40:39 · 663 阅读 · 0 评论 -
Kruskal 最小生成树
Kruskal 最小生成树:通过找最短边把所有点连接起来#include #include #define UNVISITED 0#define VISITED 1#define INFINITE 9999#define N 7 // 定义图的顶点数using namespace std;//图的基类#define UNVISITED 0#define V转载 2014-01-04 18:57:23 · 551 阅读 · 0 评论 -
图的邻接矩阵表示和拓扑排序
实现了:图的相邻矩阵的转换,深度和广度遍历// 图的相邻矩阵表示方法#include #include using namespace std;#define N 5 // 定义图的顶点数//*********** Graph.h ************////图的基类#define UNVISITED 0#define VISITED 1const int转载 2014-01-04 14:03:51 · 1514 阅读 · 0 评论 -
Dijkstra 最短路径
Dijkstra 最短路径:针对有向图,不支持负权值// 图的相邻矩阵表示方法,还要用到最小值堆#include #include #define UNVISITED 0#define VISITED 1#define INFINITE 9999 //设置最大值#define N 5 // 定义图的顶点数using namespace std;/转载 2014-01-04 16:54:36 · 683 阅读 · 0 评论 -
优化的快速排序
优化后的快速排序转载 2014-01-05 14:32:21 · 558 阅读 · 0 评论 -
优化的归并排序
优化的归并排序转载 2014-01-05 14:38:25 · 832 阅读 · 0 评论 -
插入,选择,交换,归并,基数排序
1. 插入排序1.1 直接插入排序 (将后面的元素插入到前面已经排好的序列)稳定;空间代价Θ(1),时间代价:Θ(n*n)/****************** 直接插入排序 ******************/template void ImprovedInsertSort (Record Array[], int n){ //Array[] 为待排序数组,n 为转载 2014-01-05 14:12:30 · 755 阅读 · 0 评论 -
排序算法性能分析
1. 性能分析算法 最大 平均 最小 辅助 稳定性 时间 时间 时间 空间代价 直接插入 Θ(n2) Θ(n2) Θ(n) Θ(1) 稳定 排序 冒泡排序 Θ(n2) Θ(n2) Θ(n) Θ(1) 稳定 选择排序 Θ(n2) Θ(转载 2014-01-05 16:22:25 · 528 阅读 · 0 评论 -
基于静态链的基数排序
基于静态链的基数排序转载 2014-01-05 15:34:25 · 888 阅读 · 0 评论 -
KMP 字符串模式匹配算法
参考文章:【经典算法】——KMP,深入讲解next数组的求解详解KMP算法获取特征向量数组nextvoid getNext(char cStr[], int len, int next[]) { int temp; for (int i = 1; i < len; i++) { temp = next[i - 1]; while (temp转载 2013-11-22 18:31:58 · 811 阅读 · 0 评论 -
递归与非递归
递归:在调用递归函数前,系统要保留以下三个信息:返回地址本函数调用时的实参值和函数值被调用函数的局部变量值尾递归递归调用语句只有一个,而且处于算法的最后,例如求n!long Fact (int n){ if (n == 0) return 1; return n * Fact (n -1);}单向递归:指递归函数中有一处以上的递归转载 2013-11-27 22:25:11 · 2357 阅读 · 0 评论 -
递归转非递归学习一:N的阶乘
之前上《数据结构》的网络课程学习了递归转非递归的机械式转换的方法主要步骤,然后自己尝试从最简单的N的阶乘转非递归入手:原创 2013-11-28 16:04:13 · 2081 阅读 · 0 评论 -
顺序队列类定义
// abstract data type for queuetemplate class Queue{public: // 队列的运算集 void clear(); // 变为空队列 bool enQueue(const T& item); // item入转载 2013-11-15 21:56:54 · 1424 阅读 · 0 评论 -
链式队列类定义
template class Link // 定义每个节点类{public: T data; Link *next; Link(Link *nextLink=NULL) { next = nextLink; } Link(T item, Link *nextLink=NULL) // 初始化节点内容 {转载 2013-11-15 23:11:39 · 1129 阅读 · 0 评论 -
数据结构学习笔记
顺序表查询,删除,插入,修改元素时候,应该考虑顺序表是否溢出;是否为空;对应处理的元素是否合理;顺序链表查删改操作,还需要考虑是否为头尾结点。原创 2013-11-05 14:36:02 · 673 阅读 · 0 评论 -
顺序优先队列类定义
#include #include using namespace std;template class SPQueue // 顺序优先级队列{private: DataType *data; // 抽象类型DataType定义的指针数组 int size; // 队列的大转载 2013-11-21 14:50:25 · 1063 阅读 · 0 评论 -
顺序栈类定义
// abstract data type for stacktemplate // 栈的元素类型为 Tclass Stack{public: // 栈的运算集 void clear(); // 变为空栈 bool push(const T item);转载 2013-11-07 22:22:28 · 1776 阅读 · 0 评论 -
顺序表类定义
// abstract data type for Listtemplate class List { void clear(); // 置空线性表 bool isEmpty(); // 线性表为空时,返回True bool append(T value); // 在表尾加转载 2013-11-05 15:07:43 · 2111 阅读 · 0 评论 -
顺序链表类定义
template // 假定线性表的元素类型为Tclass Link{ T data; // 用于保存节点元素的内容 Link* next; // 只想后继结点的指针 Link(const T info, Link* nextValue = NULL) // 具有两个参数的Link构造函数 { data = inf转载 2013-11-05 15:48:49 · 1059 阅读 · 0 评论 -
链式栈类定义
// abstract data type for stacktemplate // 栈的元素类型为 Tclass Stack { public: // 栈的运算集 void clear(); // 变为空栈 bool push(const T item); // item入栈,成功则返回真,否则返回假 bool pop(T& item); // 返回栈顶内容并弹出,成功返回真,否则返回假, bo转载 2013-11-07 21:38:55 · 1237 阅读 · 0 评论 -
函数运行时的动态存储分配
• 栈(stack)用于分配后进先出LIFO的数据– 如函数调用• 堆(heap)用于不符合LIFO的– 如指针所指向空间的分配转载 2013-11-12 21:56:17 · 858 阅读 · 0 评论 -
递归转非递归学习三:汉诺塔问题
在学习了递归转非递归的机械式转换的方法之后,先练习写了N的阶乘方法转非递归(模拟栈)的代码,然后练习将斐波那契数列求F(N)转非递归(模拟栈),最后在写汉诺塔问题转非递归过程中花了更多一些时间,中途因为没有保存调用递归之前的一组局部变量,导致一直没有得到正确答案。#include #include using namespace std;// (1). 设置一个工作栈struct原创 2013-11-29 10:50:27 · 1694 阅读 · 0 评论 -
汉诺塔,逆波兰表达式,苹果放置递归实现
1. 汉诺塔问题: 问题描述:有三个柱子A,B,C,现在需要将柱子A上面n个由小到大放置的盘子移到柱子C上,移动规则是:每次只能移动一个盘子,盘子放置只能是大盘子在下面,小盘子在上面。// n带表盘子的数目,// fromPeg是n盘子最初所在的柱子// auxPeg是中间用于借助移动的柱子// toPeg是最终n盘子需要全部放上去的柱子void Tower(int n, c转载 2013-11-28 15:24:44 · 717 阅读 · 0 评论 -
递归转非递归学习二:求斐波那契数列F(N)的值
上《数据结构》的网络课程学习了递归转非递归的机械式转换的方法之后,先练习写了N的阶乘方法转非递归(模拟栈)的代码,然后试着将斐波那契数列求F(N)的值的过程(模拟栈)转化为非递归:#include #include using namespace std;// (1). 设置工作栈中元素的结构体struct Datatype{ int n; // 当前原创 2013-11-28 18:06:30 · 1947 阅读 · 0 评论 -
二叉树 最小堆
堆的最小堆化,插入,删除/**************** 算法5.12 堆的类定义和筛选法 **********************/#include using namespace std;#define FALSE 0#define TRUE 1template class MinHeap //最小堆类定义{p转载 2013-12-07 11:41:45 · 935 阅读 · 0 评论 -
二叉树之哈弗曼树
实现哈弗曼编码1. MinHeap.h/**************** MinHeap.h **********************/#include using namespace std;#define FALSE 0#define TRUE 1template class MinHeap //最小堆类定义转载 2013-12-07 17:45:03 · 912 阅读 · 0 评论 -
二叉搜索树
二叉搜索树:继承与二叉树。注意:类的提前声明,设置友元类访问私有数据#include #include #include using namespace std;template class BinarySearchTree; // 类的提前声明template class BinaryTree; // 类的提前声明template class Bina转载 2013-12-05 16:47:20 · 768 阅读 · 0 评论 -
索引排序
一般的排序方法都可以将那些赋值(或交换)都换成对 index 数组的赋值(或交换)1. 结果下标 IndexArray[i] 存放的是数据 Array[IndexArray[i]] 应该摆放在 Array 中第 i 个位置。例如:下标 0 1 2 3 4 5 6 7排序码 29 25 34 64 34' 12 32 45Index 5转载 2014-01-05 16:11:22 · 554 阅读 · 0 评论