![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 75
风吹无迹雨落无痕
Follow my heart!
展开
-
Binary Tree(C++)
#include #include using namespace std ;template class BinaryTree ; //forward declarationtemplate class BTnode { //Node of BinaryTree public : BTnode( ) ; BTnode( const val原创 2015-04-26 17:28:49 · 531 阅读 · 0 评论 -
第十章(7).选择排序
#include using namespace std ;//快速排序(Quick Sort)是对冒泡排序的一种改良。它的基本思想是通过一趟排序将待排记录分割成独立的两部分,//其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序.#define MAXSIZE 20 //存储元素的顺序表的最大长度typedef int KeyT原创 2015-04-26 17:25:19 · 285 阅读 · 0 评论 -
第十章(2).折半插入排序
#include using namespace std ;#define MAXSIZE 20 //存储元素的顺序表的最大长度typedef int KeyType ; //关键字类型typedef int InfoType ; //其他数据项类型typedef struct { KeyType key ; InfoType otherinfor ; /原创 2015-04-26 17:25:01 · 290 阅读 · 0 评论 -
第七章(3).图的十字链表存储表示
//十字链表(Orthogonal List)是有向图(Take care!)的另一中链式存储结构,可以看作是将有向图的邻接表和逆邻接表结合起来得到的一种链表。//在十字链表中,对应于有向图中每一个弧有一个结点,对应每个顶点也有一个结点。#include #include #include //#include #define TRUE 1 #define FALSE 0 #define原创 2015-04-26 17:23:37 · 450 阅读 · 0 评论 -
第七章(1).图的数组(邻接矩阵)存储表示
//图形结构的特点是:节点之间的关系可以是任意的//#include #include #include #include #define TRUE 1 #define FALSE 0 #define OK 1#define ERROR 0#define OVERFLOW -2 typedef int Status ; //---------------图的数组(邻接矩阵)存储表原创 2015-04-26 17:23:29 · 895 阅读 · 0 评论 -
第五章(6).广义表的扩展线性链表存储表示
#include #include #include #define TRUE 1 // 'true' is OK !#define FALSE 0 // 'false' is OK !#define OK 1#define ERROR 0#define OVERFLOW -2#define MAXSIZE 100 //串的定长顺序存储表示typedef char SString原创 2015-04-26 17:23:02 · 900 阅读 · 0 评论 -
第四章(3).块链存储表示
//用链表存储串值时,存在一个“结点大小”的问题,即每个结点可以存放一个字符,也可以//存放多个字符//当结点大小大于1时,由于串长不一定是结点大小的整倍数,则链表中的最后一个节点不一定//完全被串值占满,此时通常补上“#”或其他的非串值字符(“#”是个特殊符号)#include#include#include#define CHUNKSIZE 4 //由用户定义块的大小typedef str原创 2015-04-26 17:22:42 · 589 阅读 · 0 评论 -
第三章(6).栈的应用举例(2)
以链栈基本操作为基础//-----------------应用举例操作-------------------////Hanoi塔问题void move( char x , int n , int z ){ static int c = 0 ; //对搬动计数 printf( "%i.Move disk %i from %c to %c\n" , ++c , n , x , z ) ;}v原创 2015-04-26 17:22:26 · 344 阅读 · 0 评论 -
第三章(3).链队列
#include#includetypedef int QElemType;typedef struct QNode //链结点{ QElemType data; struct QNode *next;}QNode,*QueuePtr;typedef struct { QueuePtr front; //队头指原创 2015-04-26 17:22:15 · 245 阅读 · 0 评论 -
第三章(2).链栈
#include#includetypedef int ElemType;typedef struct SNode //链栈结点{ ElemType data; struct SNode *next;}SNode,*StackNode;typedef struct{ StackNode top; //因为链表的一般操作也是先进后出的,所以链栈与一般链表一样,也只需要一个头指针(top指针原创 2015-04-26 17:22:12 · 333 阅读 · 0 评论 -
第二章(3).静态链表
//这一部分,以前完成得不够后,后来在中途经过了完善才发表的! //*************************************************************************// //这种存储结构仍需要预先分配一个较大的空间,但在做线性表的插入和删除操作时不需要移动元素,//仅需要修改指针,故仍具有链式存储结构的主要优点#include#include原创 2015-04-26 17:21:05 · 316 阅读 · 0 评论 -
第三章(8).离散事件模拟
#include#include#include#include#define ArriveTime 5 //两个相邻客户到达银行的时间间隔不超过5分钟#define EventTime 30 //每个客户办理业务的事件不超过30分钟#define ClostTime 100 //关门时间#define QueueNum 5 //队列数,即窗口数typedef struct原创 2015-04-26 17:25:59 · 384 阅读 · 0 评论 -
第十一章(2).置换—选择排序
#include #include #define w 6#define MAXKEY 100 //最大关键字#define MINKEY 0 //最小关键字#define N 24 //数据个数typedef int KeyType ;typedef int LoserTree[ w ] ;typedef struct { KeyType key ;// int原创 2015-04-26 17:25:41 · 669 阅读 · 0 评论 -
第五章(4)十字链表
提醒一句哦:从上一节开始,我用了C++编译器(因为此时刚好学了C++,尝一下鲜),所以在往函数中传递数据时,用了引用,而没有用指针。不过说真心话,这引用比指针真的真的方便了许多许多啊!!!强烈建议大家使用引用,我嘛,看心情,想用哪个就用哪个!呵呵…… //当矩阵的非零元个数和位置在操作过程中变化较大时,就不宜采用顺序存储结构来表示三元组的线性表//每个非零元可用一个含5个域的结点表示,其中除原创 2015-04-26 17:22:56 · 395 阅读 · 0 评论 -
第七章(2).图的邻接表存储表示
//邻接表中,对图中每个顶点建立一个单链表,第i个单链表中的节点表示依附于顶点vi的边(对有向图是以顶点vi为尾的弧)//每个链表中的节点有三个域组成:邻接点域(adjvex),链域(nextarc),数据域(info)//每个链表附设一个表头节点。表头节点只有链域(firstarc)和数据域(data)#include #include #include #include #define TRU原创 2015-04-26 17:23:33 · 908 阅读 · 0 评论 -
第七章(7).关结点和重连通分量
//无向图:假若在删去顶点v以及和v相关联的各边之后,将图的一个连通分量分割成两个或两个以上的连通分量,则称顶点v为改图的一个关节点。一个没有关结点的连通图是重连通图。//若在连通图上至少删去K个顶点才能破坏图的连通性,则称此刻的连通度为k.一个网络的连通度越高,其系统越安全可靠。#include #include #include #include #define TRUE 1 #define原创 2015-04-26 17:23:51 · 814 阅读 · 0 评论 -
前言
其实很早就想写这样的博客了!一则是为了分享我学习到了一切,另一则是方便自己无论在合适在何地都能方便的再利用自己过去的成果!毕竟代码复用能提高自己将来的开发效率嘛!呵呵…… 数据结构这门应该课算是学计算机学中重中之重了!我从大二下学期开始动手写,知道大三上学期结束的时候才写得差不多!在这里我的先说明一下,我依照的课本是清华大学出版社的严蔚敏那本教材,C语言版的! 对于代原创 2015-04-26 17:21:00 · 465 阅读 · 0 评论 -
第十章(11).基数排序
这次的经历终于让我尝到了什么叫“尽信书不如无书”!虽然以前也有过类似的经历,但是这次的经历实在是太深刻了啊!调试一个小时!!!这就是代价啊!不过这也有好处,让我对基数排序的原理理解更深了! (思想和代码近似书上所描叙!)#include #include #define MAX_NUM_OF_KEY 3 //关键字项数的最大值#define RADIX 10 //关键字基数,此时是十进制原创 2015-04-26 17:25:33 · 806 阅读 · 0 评论 -
第十章(10).归并排序(非递归)
#include using namespace std ;//归并排序(Merging Sort) : 将两个或两个以上的有序表组成一个新的有序表.//2-路归并排序中的核心操作是将一堆数组中前后相邻的两个有序序列归并为一个有序序列(此程序为非递归形式实现)#define MAXSIZE 20 //存储元素的顺序表的最大长度typedef int KeyType ; //关原创 2015-04-26 17:25:30 · 446 阅读 · 0 评论 -
第九章(2).次优查找树
//顺序查找以及折半查找最优的前提是各记录被查找的概率相等!而显示中很多地方,各记录的查找概率不等!//在概率不等的情况下,取最小的二叉树为静态最优查找树(Static Optimal Search Tree),//由于构造静态最优查找树花费的时间代价较高,所以有了次优查找树(Nearly Optimal Search Tree)#include #include #include #includ原创 2015-04-26 17:24:42 · 545 阅读 · 0 评论 -
第七章(8).拓扑排序
//一个无环的有向图称做有向无环图( directed acyline graph ),简称DAG图//利用有向无环图,则可以实现对相同子式的共享,从而节省存储空间。//利用顶点表示活动,用弧表示活动的优先关系的有向图称为顶点表示活动的网( Activity On Vertex Network ),简称AOV网。AOV网中,不存在有向环。//检测是否存在环的方法:对有向图构造其顶点的拓扑有序序列,原创 2015-04-26 17:23:55 · 357 阅读 · 0 评论 -
第五章(2)三元组顺序表
//---------------稀疏矩阵的三元组顺序表存储表示---------------//#include #include #define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2#define UNDERFLOW -3#define MAXSIZE 1原创 2015-04-26 17:22:49 · 1003 阅读 · 0 评论 -
第五章(1)数组的顺序表示和实现
好吧!在这一章开始之前先说一说我当初的心得吧! 当初,链表,栈和队列,因为老师强调的比较多,运用的也比较多,理解得也很好,代码量也不大,所以完成了比较顺利。再后来,关于串的三种存储表示,代码量稍稍增加,但也不成问题。结果一进入第五章,人就懵了!简直就像之前还在印度平原漫步,结果一抬头,应该是一仰头,就看见喜马拉雅山了!!!着实吓着了,想放弃了,结果还是坚持下去了! 尤其第一节的数组的顺序表示和原创 2015-04-26 17:22:46 · 663 阅读 · 0 评论 -
第四章(2).堆分配存储表示
//与定长顺序存储一样,仍以一组地址连续的存储单元存放串值字符序列,但他们的空间都是动态分配的#include#includetypedef struct{ char *ch; int length;}HString;void InitString(HString *T) //take care! T要初始化,T指向的结构体也要初始化{ (*T).ch=NULL; (*T).lengt原创 2015-04-26 17:22:36 · 743 阅读 · 0 评论 -
第二章(4).循环链表
#include#include //循环链表比一般链表不同的地方就是循环条件是(p != head ) #define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define OVERFLOW -2 typedef int ElemType; typedef struct LNode{ ElemType data; struct L原创 2015-04-26 17:21:18 · 265 阅读 · 0 评论 -
第九章(4).平衡二叉树
//平衡二叉树是为了解决二叉排序树中某些极端的现象而产生的!//平衡二叉树( Balanced Binary Tree 或 Height-Balanced Tree )又称AVL树。//特点:左右子树的深度之差的绝对值不超过1。//平衡二叉树和二叉排序树的操作只有Insert和Delete不同(因为要调整平衡因子).#include #include //#include #define TRUE原创 2015-04-26 17:24:49 · 326 阅读 · 0 评论 -
第九章(1).顺序查找以及折半查找
//查找表(Search Table)是由同一类型的数据元素构成的集合。由于"集合"中的数据元素之间存在完全松散的关系,因此查找表是一种非常灵便的数据结构。//对查找表的操作经常有:(1)查询某个元素是否在表中;(2)检索某个特定元素的各种属性;(3)在查找表中插入一个元素;(4)从查找表中删去某个数据元素.//静态查找表只对查找表做前两种关于查找的操作。而动态查找表可以做后两种操作。#inclu原创 2015-04-26 17:24:10 · 693 阅读 · 0 评论 -
第七章(9).关键路径
//与AOV网相对应的是AOE网( Activity On Edge )即边表示活动的网。AOE网是一个带权的有向无环网,其中,顶点表示事件,弧表示活动,权表示活动持续时间。//通常AOE网可用来估算工程的完成时间!详细注释见课本!#include #include #include #include #define TRUE 1 #define FALSE 0 #define OK 1原创 2015-04-26 17:23:58 · 316 阅读 · 0 评论 -
第十章(6).快速排序
#include using namespace std ;//快速排序(Quick Sort)是对冒泡排序的一种改良。它的基本思想是通过一趟排序将待排记录分割成独立的两部分,//其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序.#define MAXSIZE 20 //存储元素的顺序表的最大长度typedef int KeyT原创 2015-04-26 17:25:15 · 297 阅读 · 0 评论 -
第九章(5).哈希表
先说一句:哈希表真的很重要很重要!我寝室一哥们,在做一个操作系统(先承认,他比我NB多了!不过他的NB也是用数不清的付出换来的!相信大家有一天也会变得很NB的!),他被文件系统里面的哈希表问题缠绕了将近一个月!就这一点就足见哈希表的重要性了! 哈希表的构造方法和处理冲突方法均有多种,所以你懂的!练练其中一两中组合,然后了解各种组合的优劣处,在实际运用的时候再灵活选择合适的组合吧!#include原创 2015-04-26 17:24:53 · 308 阅读 · 0 评论 -
第七章(11).每对顶点间的最短路径
#include #include #include #include #define TRUE 1 #define FALSE 0 #define OK 1#define ERROR 0#define OVERFLOW -2 typedef int Status ; //---------------图的数组(邻接矩阵)存储表示------------------//#defi原创 2015-04-26 17:24:06 · 356 阅读 · 0 评论 -
第三章(7).栈的应用举例(3)
同样采用链栈基本操作typedef struct{ int x ; int y ;} PosType ;typedef struct{ int ord ; //通道块在路径上的"序号" PosType seat ; //通道块在迷宫中的"坐标位置" int di ; //从此通道块向下一通道块的"方向"(1,2,3,4分别表示四个方向)}ElemType ;typedef stru原创 2015-04-26 17:22:29 · 349 阅读 · 0 评论 -
第三章(1).顺序栈
#include#include#define STACK_SIZE 100#define STACKADD 10typedef int SElemType;typedef struct{ SElemType *base; //在栈构造之前和销毁之后,base的值为NULL SElemType *top; //栈顶指针 int stacksize; //当前已分配的储存空间,以元原创 2015-04-26 17:22:08 · 343 阅读 · 0 评论 -
第二章(2).链表
//-----------------------------普通链表-------------------------------//#include#include typedef int ElemType; typedef struct LNode{ ElemType data; struct LNode *next;}LNode,*LinkList; //链表函数最重要的就是要返原创 2015-04-26 17:21:14 · 302 阅读 · 0 评论 -
第六章(9).四皇后问题
#include #include #define N 4 //棋盘行数列数#define OK 1 #define ERROR 0//初始棋盘int Data[ N ][ N ] = { { 0 , 0 , 0 , 0 } , { 0 , 0 , 0 , 0 } , { 0 , 0 , 0 , 0 } , { 0 , 0 , 0 , 0 } } ;static原创 2015-04-26 17:25:48 · 530 阅读 · 0 评论 -
第六章(8)求集合的幂集
以前落下的习题,现在补上!#include#include#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量#define LISTADD 10 //线性表存储空间的分配增量#define TRUE 1#define FALSE 0#define ERROR -1typedef int ElemType;typedef struct{ ElemType原创 2015-04-26 17:25:44 · 1455 阅读 · 0 评论 -
第十章(1).直接插入排序
#include using namespace std ;#define MAXSIZE 20 //存储元素的顺序表的最大长度typedef int KeyType ; //关键字类型typedef int InfoType ; //其他数据项类型typedef struct { KeyType key ; InfoType otherinfor ; /原创 2015-04-26 17:24:58 · 371 阅读 · 0 评论 -
第七章(10).单源最短路径
//对于求最短路径,迪杰斯特拉(Dijkstra)提出了一个按路径长度递增的次序产生最短路径的算法.//即:从某个源点到其余各顶点的最短路径。//用图的邻接矩阵存储表示该有向图G#include #include #include #include #define TRUE 1 #define FALSE 0 #define OK 1#define ERROR 0#define OVER原创 2015-04-26 17:24:02 · 275 阅读 · 0 评论 -
第七章(6).最小生成树
//由MiniSpanTree_PRIM()可知Prim算法的时间复杂度为O(n*n),(n为顶点数)与网中的边数无关,因此使用于求边稠密的网的最小生成树。//而Kruskal算法恰恰相反,它的时间复杂度为O(e*log e),(e为网中边的数目)。它比较适合求边稀疏的网的最小生成树。#include #include #include #define TRUE 1 #define FALSE原创 2015-04-26 17:23:47 · 357 阅读 · 0 评论 -
第六章(7).哈夫曼树及其应用
//---------------------------------------HuffmanTree------------------------------------////霍夫曼编码(Huffman Coding)是一种编码方式,是一种用于无损数据压缩的熵编码(权编码)算法////霍夫曼编码使用变长编码表对源符号(如文件中的一个字母)进行编码,其中变长编码表是通过一种评估来源符号出现机原创 2015-04-26 17:23:25 · 477 阅读 · 0 评论