数据结构与算法
文章平均质量分 57
朝向高处的旅途
0101
展开
-
ADT稀疏矩阵 及 转置
ADT稀疏矩阵的表示及其快速转置#include#include////////////using namespace std;#define MAXX 100ifstream file("data.txt",ios::in);/////////////////typedef struct { int row,col,value;}term;class Sparse_Mat原创 2013-12-24 11:59:05 · 988 阅读 · 0 评论 -
29.选择排序
#include#include#include#includeusing namespace std;#define MAXSIZE 10const int n = MAXSIZE;int num[n];void init(){ for (int i = 0; i < n; i++) num[i] = rand() % 100;//产生MAXSIZE个数据 数据范围为0原创 2014-04-23 08:40:45 · 551 阅读 · 0 评论 -
30.快速排序
#include#include#include#includeusing namespace std;#define MAXSIZE 10const int n = MAXSIZE;int num[n];void init(){ for (int i = 0; i < n; i++) num[i] = rand() % 100;//产生MAXSIZE个数据 数据范围为0原创 2014-04-23 08:52:43 · 467 阅读 · 0 评论 -
KMP字符串模式匹配详解 .
个人觉得这篇文章是网上的介绍有关KMP算法更让人容易理解的文章了,确实说得很“详细”,耐心地把它看完肯定会有所收获的~~,另外有关模式函数值next[i]确实有很多版本啊,在另外一些面向对象的算法描述书中也有失效函数 f(j)的说法,其实是一个意思,即next[j]=f(j-1)+1,不过还是next[j]这种表示法好理解啊:转载 2013-08-08 15:51:33 · 575 阅读 · 0 评论 -
priority_queue的用法
priority_queue调用 STL里面的 make_heap(), pop_heap(), push_heap() 算法实现,也算是堆的另外一种形式。先写一个用 STL 里面堆算法实现的与真正的STL里面的 priority_queue用法相似的priority_queue, 以加深对 priority_queue 的理解 #include #include #in原创 2013-11-17 19:29:17 · 624 阅读 · 0 评论 -
ADT栈
#includeusing namespace std;#define MAX_LEN 100typedef struct{ int key; //others}element;class MYSTACK{private: int t; element terms[MAX_LEN];public: MYSTACK(); void push(element a); e原创 2013-12-24 13:26:17 · 722 阅读 · 0 评论 -
求欧拉回路的一种解法
求欧拉回路的一种解法 下面是无向图的欧拉回路输出代码:注意输出的前提是已经判断图确实是欧拉回路。 int num = 0;//标记输出队列 int match[MAX];//标志节点的度,无向图,不区分入度和出度 void solve(int x) { if(match[x] == 0) Record[num++] = x转载 2013-11-16 18:37:03 · 845 阅读 · 0 评论 -
排序种类
书上介绍的排序算法:冒泡排序 及其优化简单的选择排序直接插入排序直接插入排序的改进--希尔排序(增量减小的插排)堆排序归并排序(递归实现 和 非递归实现)快速排序(最快的排序 要不 能叫快速排序么)其他的排序;(我知道的)桶排序;计数排序;鸡尾酒排序(双向冒泡排序);基数排序;合并排序;(忘了这是干嘛的了)原创 2013-08-12 21:27:42 · 720 阅读 · 0 评论 -
sth about 离散数学
首 先要明确的是,由于《离散数学》是一门数学课,且是由几个数学分支综合在一起的,内容繁多,非常抽象,因此即使是数学系的学生学起来都会倍感困难,对计算 科学专业的学生来说就更是如此。大家普遍反映这是大学四年最难学的一门课之一。但鉴于《离散数学》在计算科学中的重要性,这是一门必须牢牢掌握的课程。既 然如此,在学习《离散数学》时,大家最应该牢记的是唐诗“熟读唐诗三百首,不会做诗也会吟。”学习过程是一个扎转载 2013-12-31 16:31:44 · 679 阅读 · 0 评论 -
Dijkstra算法学习笔记
Dijkstra算法是一种最短路径算法,用于计算一个节点到其它所有节点的最短路径,动态路由协议OSPF中就用到了Dijkstra算法来为路由计算最短路径。算法本身并不是按照我们的正常思维习惯,我们一般会,从原点遍历所有与之相连的节点,找到最短路径,再从最短路径上的那个点遍历与之相连的所有其它点(原点除外),然后依次类推。这样做虽然可以算出一个树形,但是在大多数情况下,这种算法会产生很多次优路径原创 2013-12-03 19:34:06 · 768 阅读 · 0 评论 -
ADT 队列 queue
//用线性表 实现循环队列。。 #includeusing namespace std;#define MAX_SIZE 100//用线性表实现循环队列class myqueue{private: int term[MAX_SIZE]; int front,rear;public : myqueue(); bool is_empty原创 2013-12-24 14:19:15 · 1272 阅读 · 0 评论 -
二叉查找树(二叉排序树)的详细实现 .
1、序 详细实现了二叉查找树的各种操作:插入结点、构造二叉树、删除结点、查找、 查找最大值、查找最小值、查找指定结点的前驱和后继2、二叉查找树简介 它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树3、转载 2013-11-24 16:27:31 · 733 阅读 · 0 评论 -
判断是否为欧拉图的并行算法
分类: 分布式与并行计算 算法 欧拉图:一个图为欧拉图,当且公当有一条回路经过图的每一条边且恰好经过一次。欧拉定理表明:一个图为欧拉图,当且仅当不含有奇度数的顶。假设图G大小为M * N和邻接矩阵A。 判断一个图是否为欧拉图,很容易在O(M*N)的时间内完成。为了说明方便,下面设M = N下面给出复杂度为O(Log(N)) 并行算法,注意这里只给转载 2013-11-16 18:15:44 · 1171 阅读 · 0 评论 -
kruskal算法..
////////////////////////////////////////#include#include#include#include// 用 stl 栈 存储#define MAXSIZE 1000using namespace std;//////////////////////////////////////////// Kruskal算法 生成最小生成树原创 2014-07-03 09:24:48 · 798 阅读 · 0 评论 -
36 双端堆
/*双端堆双端堆的性质:1.根节点为空节点2.根的左子树是最小堆3.根的右子树是最大堆4.i为左子树的任意一节点 ,则j为为与i在左子树中位置对应的在右子树中的位置,如果对应位置不存在 则与其父节点对一个,(因为我们这是一颗完全二叉树,所以至少对应节点的父节点必定存在),则 T[i]<=T[J];*//*个人理解 : 左边是最小堆 右边是最大堆 如果把 左子树向下原创 2014-05-11 20:53:31 · 777 阅读 · 0 评论 -
28.冒泡排序
#include#include#include#includeusing namespace std;#define MAXSIZE 10const int n = MAXSIZE;int num[n];void init(){ for (int i = 0; i < n; i++) num[i] = rand() % 100;//产生MAXSIZE个数据 数据范围为0原创 2014-04-23 08:37:28 · 418 阅读 · 0 评论 -
27. 插入排序
#include#include#include#includeusing namespace std;#define MAXSIZE 10int num[MAXSIZE];void init(){ for (int i = 0; i < MAXSIZE; i++) num[i] = rand() % 100;//产生MAXSIZE个数据 数据范围为0~~~99;}原创 2014-04-22 23:31:54 · 556 阅读 · 0 评论 -
26.基于 有向图的邻接表表示 实现 AOV网 的拓扑排序
我能说我把我的代码贴上来 它竟然说有敏感词不能发粗来么!!!!!原创 2014-04-21 22:19:03 · 1505 阅读 · 0 评论 -
13.用二叉链表实现 二叉树的创建 遍历 4种
////////////////////////////////////////#include#include#define OK 0#define ERROR 1typedef char ElemType;FILE *fp;void InitFile(){ bool e; fopen_s(&fp, "data.txt", "r"); //fopen_s(&fp, "tda原创 2014-04-18 22:42:01 · 945 阅读 · 0 评论 -
12.完全二叉树的顺序存储表示
////////////////////////////////////////#include#include#define OK 0#define ERROR 1typedef int ElemType;FILE *fp;void InitFile(){ fp = fopen("data.txt", "r+"); if (!fp) exit(ERROR); return;原创 2014-04-18 11:55:50 · 1194 阅读 · 0 评论 -
34. 堆排序
#include#include#include#includeusing namespace std;#define MAXSIZE 10const int n = MAXSIZE;int num[n+1];int number;void init(){ number = n; for (int i = 1; i <=n; i++) num[i] = rand()原创 2014-05-04 20:32:00 · 500 阅读 · 0 评论 -
33. 归并排序(迭代)
#include#include#include#includeusing namespace std;#define MAXSIZE 10const int n = MAXSIZE;int num[n];void init(){ for (int i = 0; i < n; i++) num[i] = rand() % 100;//产生MAXSIZE(10)个数据 数据原创 2014-05-04 20:10:27 · 483 阅读 · 0 评论 -
31.归并排序 de 递归实现
#include#include#include#includeusing namespace std;#define MAXSIZE 10const int n = MAXSIZE;int num[n];void init(){ for (int i = 0; i < n; i++) num[i] = rand() % 100;//产生MAXSIZE个数据 数据范围为0原创 2014-04-23 09:44:17 · 615 阅读 · 0 评论 -
11.十字链表 实现 稀疏矩阵 及 矩阵相加
#include#includeFILE *fp;// 十字链表 实现 稀疏矩阵 及 矩阵相加#define OK 0#define ERROR 1#define OVERFLOW 1typedef bool Status;typedef char ElemType;typedef struct OLNode//节点信息{ int i, j; struct OLNo原创 2014-04-17 23:49:57 · 2533 阅读 · 0 评论 -
10.稀疏矩阵的存储 转置 相乘
#include#include#define MAXSIZE 1000#define MAXRC 100#define OK 0#define ERROR 1//稀疏矩阵的存储typedef bool Status;typedef int ElemType;typedef struct{ int i, j; ElemType e;}Triple;typedef原创 2014-04-17 21:24:07 · 804 阅读 · 0 评论 -
4.用可动态分配的一维数组实现栈
#include#include//用可动态分配的一维数组实现栈#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define OK 0#define ERROR 1typedef int SElemType;typedef bool Status;typedef struct{ SElemType *base; SE原创 2014-04-16 15:05:44 · 551 阅读 · 0 评论 -
9.KMP模式匹配算法实现o(n)复杂度的匹配
#include#define MAXSIZELEN 255typedef unsigned char SString[MAXSIZELEN + 1];void InitSString(SString &A, char *a){ int i = 1, j = 0; while (i < MAXSIZELEN && a[j]) { A[i++] = a[j++]; }原创 2014-04-16 22:44:58 · 680 阅读 · 0 评论 -
8.用定长数组 实现 循环队列
// 用定长数组 实现 循环队列#include#include#define MAXSIZE 100typedef bool Status;#define OK 0#define ERROR 1typedef int QElemType;typedef struct QNode{ QElemType *base; int front; int rear;}SqQueue原创 2014-04-16 18:41:26 · 969 阅读 · 0 评论 -
6.基于STL STACK的 迷宫算法
// 这是 一个心酸的开头语 用栈来尝试写 #include#includeusing namespace std;typedef struct node{ int x; int y; int c;//表示方向}Node;//int dir[4][2] = { 1, 0, 0, -1, -1, 0, 0, -1 }; //顺时针方向 右 下 左 上int原创 2014-04-16 16:27:28 · 818 阅读 · 0 评论 -
5.基于顺序栈 实现 检测括号匹配程序
#include#include//用可动态分配的一维数组实现栈#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define OK 0#define ERROR 1typedef char SElemType;//////////类型更改为chartypedef bool Status;typedef struct{原创 2014-04-16 15:19:44 · 680 阅读 · 0 评论 -
2.线性表的链式表示和实现
#include#include//2.3线性表的链式表示和实现typedef int ElemType;typedef int Status;#define OK 0#define OVERFLOW 1#define ERROR 2//线性表的单链表存储结构typedef struct LNode{ ElemType data; struct LNode *next;}原创 2014-04-16 13:57:08 · 650 阅读 · 0 评论 -
3.静态链表实现 线性表
#include//静态链表实现 线性表#define MAXSIZE 100typedef int ElemType ;typedef int Status;#define OK 1#define OVERFLOW 2typedef struct{ ElemType data; int cur;//存储下一个节点的索引}componet,SLinkList[MAXSIZE原创 2014-04-16 14:37:05 · 626 阅读 · 0 评论 -
7. 使用栈实现加减乘除四则运算
//实现 对 + - * / 的四则运算#include#includeusing namespace std;stack OPND;// 运算数stack OPTR;//运算符char cmp(char a, char b){//考虑情况 if (a == '#') return '<'; if (b == '#') return '>'; int ta, tb;原创 2014-04-16 17:37:47 · 2335 阅读 · 0 评论 -
14.二叉树 中序遍历 先序遍历 的非递归实现 以及 二叉树 的复制 及判断二叉树的等价性
////////////////////////////////////////#include#include#include#include#include#define OK 0#define ERROR 1using namespace std;typedef char ElemType;FILE *fp;void InitFile(){ bool e; fop原创 2014-04-19 11:51:42 · 457 阅读 · 0 评论 -
temp: 二叉树创建小知识
只有先序、后序、层序可以用来创建二叉树(且要添加虚空节点),中序是不可以的。原因很简单,因为即使添加了虚空节点,中序序列仍然不可以唯一确定一棵二叉树。(那何来创建二叉树之说?)如:设一棵带虚空节点(用'#'表示)的二叉树的中序遍历序列为:#B#A#D#C#我们可以同时找到至少两棵符合条件的二叉树:(1) A B C # # D #原创 2014-04-19 12:16:50 · 533 阅读 · 0 评论 -
35 min_max_heap insert delete
#include#define MAXSIZE 100#define FALSE 0#define TRUE 1#define MSWAP(x,y,temp) {temp=x;x=y;y=temp;}/////////////////////////////最小--最大堆 min_max_heap // insert and delete min/////////原创 2014-05-07 09:47:59 · 824 阅读 · 0 评论 -
23.基于 邻接表 dfs 的 求连通分支
////////////////////////////////////////#include#include#include#include#include#define OK 0#define ERROR 1#define MAXSIZE 1000using namespace std;typedef int ElemType;FILE *fp;void InitFi原创 2014-04-20 13:35:25 · 571 阅读 · 0 评论 -
18.二叉查找树 的 查找 添加
////////////////////////////////////////#include#include#include#include#include#define OK 0#define ERROR 1using namespace std;typedef int ElemType;FILE *fp;void InitFile(){ fopen_s(&fp,原创 2014-04-19 23:38:22 · 501 阅读 · 0 评论 -
20.图的存储表示-----------------邻接表
////////////////////////////////////////#include#include#include#include#include#define OK 0#define ERROR 1using namespace std;typedef int ElemType;FILE *fp;void InitFile(){ bool e; fope原创 2014-04-20 11:16:03 · 576 阅读 · 0 评论 -
25.单源最短路径 Dijkstra
////////////////////////////////////////#include#include#include#include#include#include#define OK 0#define ERROR 1#define MAXSIZE 1000using namespace std;typedef int ElemType;FILE *fp;vo原创 2014-04-20 18:45:41 · 584 阅读 · 0 评论