
数据结构与算法(严蔚敏版)
文章平均质量分 68
Kawisa
不熟悉不会说到底还是因为时间花的不够。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++代码,数据结构-拓扑算法
寒假在家过的浑浑噩噩, 把数据结构书拿回来家,想把上课没听到自己都补上,但是行动力真是差,每天也就搞一个算法,今天拓扑算法,算是较快的完成了,可能本身难度不大。我参照书上图的存储结构为邻接表,,建立邻接表的时候是按出度来建立的,但在拓扑排序里要用到入度,所以先要进行处理,建立一个结点的入度数组;拓扑排序就两步1,在有向图中选一个没有前驱的顶点(即入度为0)输出;2.从图中删除该顶点原创 2014-01-19 17:52:50 · 987 阅读 · 0 评论 -
C++代码,数据结构-内部排序-插入排序-折半插入排序
折半插入排序,只是减少了比较的次数,这样速度比直接插入排序快,但是时间复杂度仍然是N2#includeusing namespace std;//第十章 内部排序//待排记录数据的数据结构#define maxsize 20struct redtype{int key;};struct Sqlist{redtype r[maxsize];int length;};原创 2014-03-09 19:35:16 · 771 阅读 · 0 评论 -
C++代码,数据结构-内部排序-插入排序-2-路插入排序
2-路插入排序是在折半插入排序的基础上再改进之,减少移动记录的次数,但需要n个记录的辅助空间。#includeusing namespace std;//第十章 内部排序//待排记录数据的数据结构#define maxsize 20struct redtype{int key;};struct Sqlist{redtype r[maxsize];int length;原创 2014-03-09 19:39:49 · 710 阅读 · 0 评论 -
C++代码,数据结构-内部排序-插入排序-Shell排序
希尔排序,又称缩小增量排序,在时间效率上较前几种插入排序类的方法有较大的改进我们都知道直接插入排序的效率取决于序列的初始状态,而希尔排序可以通过巧妙的方法将序列经过几趟排序,使得序列在进行一次直接插入排序的时候效率大大的增加,对于希尔排序,我目前的认识也只能达到可以写出算法,已经基本理解此算法,但更深的理解还是没有的,只是觉得很巧妙#includeusing namespace st原创 2014-03-09 20:17:58 · 714 阅读 · 0 评论 -
C++代码,数据结构-内部排序-插入排序-表插入排序
利用两个指针,通过修改2n次指针来代替移动记录,时间复杂度还是N2但是表插入排序之后只求得一个有序的链表,只能对他进行顺序查找,不能进行随机查找,为实现有序表的折半查找,需要对链表进行重新排列,#includeusing namespace std;//第十章 内部排序//静态链表容量#define size 100struct slnode{int key;int ne原创 2014-03-09 19:46:00 · 1142 阅读 · 0 评论 -
C++代码,数据结构-内部排序-选择排序-堆排序
最简单的选择排序,的时间复杂度为N2;其主要操作就是比较,从减少次数出发来改进算法,书上提到了树形选择排序,但是有需要的辅助空间较多等缺点,为了弥补,威洛姆斯提出了另一种形式的选择排序——堆排序, 根据堆的定义,我们可以把一个序列对应的一维数组看成是一个完全二叉树,堆顶为最大值或者最小值,也就是完全二叉树的根,。堆排序我看了好久,最主要的原因就是对完全二叉树的性质掌握不深,若根的起点标原创 2014-03-14 21:35:02 · 1112 阅读 · 0 评论 -
C++代码,数据结构-内部排序-选择排序-归并排序
归并排序,其实就是把有N个记录的序列,看成n个序列,然后两个只有一个记录的序列归并为有两个记录的序列(归并完的序列是有序的),经过一定此时的归并,最后得到长度为n的有序序列。代码:#include#include#include#include#includeusing namespace std;//第十章 内部排序//归并排序//待排记录数据的数据结构#define原创 2014-03-17 20:39:47 · 840 阅读 · 0 评论 -
C++代码,数据结构-内部排序-基数排序-链式基数排序
基数排序是一种从记录最次位关键字开始排序的方法,比如数据,从个位开始排序,具体的方法可以参照书上,我把书上的伪代码以可运行代码的形式呈现:难点:书上 f e 数组的实现用了链表,节省了辅助空间,f数组的值只指向该位数第一个值在序列中的位置,该位数上的序列依靠记录本身带有的next指针来连接,e数组的值只指向该位数序列上最后一个值在序列上的位置。#include#include#incl原创 2014-03-19 17:59:26 · 1186 阅读 · 0 评论 -
C++代码,数据结构-外部排序-败者树
败者树是树形选择排序的一种变型,它的每个非终端结点表示左右孩子中的败者,至于为什么要使用败者树,而不是胜者树,这个问题我在网上也没有寻找到答案,可能在建立树的调整树的时候败者树更加符合外部排序的要求吧, 注:建立败者树的过程,,这个最好用图画出来比较好理解,#includeusing namespace std;#define k 5typedef int Losertree原创 2014-03-23 16:03:09 · 1659 阅读 · 2 评论 -
C++代码,数据结构-内部排序-交换排序-起泡排序
最简单的一种就是起泡排序,,#include#include#include#include#includeusing namespace std;//第十章 内部排序//交换排序//待排记录数据的数据结构#define maxsize 100000struct redtype{int key;};struct Sqlist{redtype r[maxsize]原创 2014-03-14 20:38:36 · 1118 阅读 · 0 评论 -
C++代码,数据结构-内部排序-插入排序-直接插入排序
#includeusing namespace std;//第十章 内部排序//待排记录数据的数据结构#define maxsize 20struct redtype{int key;};struct Sqlist{int r[maxsize];int length;};int buildsq(Sqlist &sq){int原创 2014-03-08 23:30:59 · 1441 阅读 · 0 评论 -
C++代码,数据结构-连通图的关节点
连通图的关节点,按照书上使用邻接表的作为图的储存,#include#includeusing namespace std;//图的邻接表的表示#define max_ver 20struct Arcnode{int adjvex; //该弧所指向顶点的位置Arcnode *nextarc;};struct vnode{char data;Arcnode *firstar原创 2014-01-17 22:34:03 · 1868 阅读 · 0 评论 -
C++代码,数据结构-二叉排序树
#include#include#include#includeusing namespace std;//排序二叉树的建立,遍历,,,利用排序二叉树来进行排序 struct Binode{ int data; Binode *lchild,*rchild;};typedef Binode* Bitree;//从空树出发,经过一系列的查找插入操作之后,可原创 2014-02-13 23:51:51 · 876 阅读 · 1 评论 -
C++代码,数据结构-次优查找树
当有序表中的个记录的查找概率不等时,要是的查找性能最优,根据折半查找的判定树可知,可以建立静态最优查找树(即最优二叉树),但是构造最优查找树的花费的时间代价能大,所以书上介绍了一个二叉树——次优查找二叉树,它的建立方法,书上讲了,但是原理没有说,我也无从得知,只能按照书上的算法,先建立次优二叉树。关键字 A B C D E F G H I权值 1 1 2 5 3 4 4 3原创 2014-02-13 19:25:21 · 987 阅读 · 0 评论 -
C++代码,数据结构-广义表的遍历(非迭代,不用设栈)
广义表的遍历有两种方法,一种是迭代法,形式简单;还有一种是非迭代但是要设栈,操作也简单;但是这两种,前者要用到内存辅助,后者要设栈站原创 2014-02-11 22:36:48 · 1646 阅读 · 0 评论 -
C++代码,数据结构-最短路径(两种情况)(迪杰斯特拉算法和弗洛伊德算法)
1.单源的,从有向图某个源点, 到其他点的最短路径利用算法迪杰斯特拉算法;Dijkstra算法的基本思想:一个辅助数组D[max_v];每个D[i]表示当前所知源点到vi的最短路径的长度一个辅助集合S,记录已找到最短路径的顶点的集合,他是逐步补充的;知道S集合包括所有点,起初S集合包含源点1.先找出源点直接可达到顶点i,并把权记录到D[i]中,不可达到顶点记为最大值;2.然原创 2014-01-29 23:32:54 · 4522 阅读 · 0 评论 -
C++代码,数据结构-关键路径
关键路径也不是很难理解很掌握,关键在于理解路径最长、最早发生、最迟发生这几个概念;#include#include#includeusing namespace std;//图的邻接表的表示,算法 7.13 。 7.14 需要用到权#define max_ver 20struct Arcnode{int adjvex; //该弧所指向顶点的位置Arcnode *nextarc;原创 2014-01-26 22:31:42 · 1630 阅读 · 0 评论 -
C++代码,数据结构-最小生成树的两个算法,Prime&Kruskal
#include#include#include#includeusing namespace std;//图的数组(邻接矩阵)存储表示,最小生成树,#define INFINITY INT_NAX#define Max_v 20#includetypedef enum{dg,dn,udg,udn}Graphkind;struct Arccell{int adj;str原创 2014-01-07 17:20:49 · 3011 阅读 · 0 评论 -
C++代码,数据结构-平衡二叉树
是原创 2014-02-19 23:56:47 · 1243 阅读 · 1 评论 -
C++代码,数据结构-外部排序-置换-选择排序
置换选择排序实在树形选择排序的基础上的来的,她产生的归并段的长度是不同,。置换选择排序的操作过程,可以查看书,这里只给出C++可运行成功代码,注:这里也需要建立败者树,但这里建立败者树的过程和上一个败者树建立过程是不一样的,,也可以自己画图进行建立过程的推导#include#includeusing namespace std;#define w 6typedef int Lo原创 2014-03-23 16:10:33 · 1851 阅读 · 0 评论