数据结构
OrdinaryCrazy
这里是张劲暾的CSDN博客
展开
-
C++ Huffman编码压缩解压
压缩:统计词频--->建立Huffman树--->保存词频--->逐个字节转换为编码写入解压:读取词频--->建立Huffman树---->读取编码重走Huffman树返回对应字符#include #include #include #include #include #include #include #define OK 1using namespace std;us原创 2017-11-08 21:54:53 · 1457 阅读 · 1 评论 -
孩子兄弟链表构造算法(1)
已知一棵树的由根至叶子结点按层次输入的结点序列及每个结点的度(每层中自左至右输入),试写出构造此树的孩子兄弟链表算法。脑子里过了一下觉得没问题,没有实测,如有问题望读者及时指出,万分感激。typedef struct CSNode { ElemType data; struct CSNode *firstchild, *nextsibling;}CSNode, *CSTree;原创 2017-11-05 21:11:38 · 6895 阅读 · 0 评论 -
用递归方法在有序表中二分查找(折半查找)
int Recurrence_Search_Bin(SSTable ST,KeyType key,int floor,int roof){ //用递归方法在有序表ST中二分查找关键字为key的数据元素,若找到则返回该元素在表中的位置,否则返回0 if(floor > roof) return 0; int mid = (floor + roof) / 2; if(k原创 2017-11-20 18:44:50 · 3227 阅读 · 0 评论 -
在以(后继)线索二叉树为储存结构的二叉排序树中删除关键字为x的数据元素
Status Delete_in_BiThrTree(BiThrTree T,BiThrTree F,int x){ //在以(后继)线索二叉树为储存结构的二叉排序树中删除关键字为x的数据元素 //删除成功返回OK,否则返回ERROR //F为指向T双亲结点的指针 if(!T) return ERROR; else{ if(T->data =原创 2017-11-30 21:25:27 · 1204 阅读 · 0 评论 -
合并二叉排序树
Status Combine_BST(BiTree A,BiTree B){ //合并二叉排序树 //将B合并入A if(!B) return OK; InsertBST(A,B->data); Combine_BST(A,B->lchild); Combine_BST(A,B->rchild); free(B); return OK原创 2017-11-30 21:33:32 · 1078 阅读 · 0 评论 -
基于Dijkstra算法的路径导航
/***************************************************文件名:路线导航创建人:张劲暾创建日期:20171204****************************************************/#include #include #include #define MapSize 256 //邻接原创 2017-12-04 20:37:40 · 894 阅读 · 0 评论 -
平衡二叉排序树节点中增设lsize域,值为左子树节点数加一,返回树中第k小节点的位置
Status Find_the_k_smallest_lsize(BSTree T,BSTree &P,int k){ //平衡二叉排序树节点中增设lsize域,值为左子树节点数加一,返回树中第k小节点的位置 if(T->lsize == k) P = T; else if(T->lsize > k) Find_the_k_smallest_lsize(T->lchild,原创 2017-12-04 20:55:37 · 1984 阅读 · 1 评论 -
双向冒泡排序
void Bi_direct_Bubble(Sqlist &L){ int roof = L.length,floor = 1; while(floor <= roof){//roof是尚未确定位置的最高索引,floor为尚未确定位置的最低索引 for(i = floor;i < roof;i++) if(L.r[i] < L.r[i + 1原创 2017-12-16 20:20:14 · 295 阅读 · 0 评论 -
逐个插入建堆
Status Insert_HeapBuilding(HeapType &H,RedType E){//小顶堆 H.length++; H.r[H.length] = E; //首先安排在最后 if(H.length == 1) return OK; son = H.length; father = H.length / 2; if(H.lengt原创 2017-12-17 09:12:36 · 798 阅读 · 0 评论 -
求以邻接矩阵存储的有向无环图中的最长路径
typedef struct{ int last_one; int length_of_way;}NODE;Status Reclear_Queue(Queue &Q,int* indegree,int N){ ClearQueue(Q); for(i = 0;i < N;i++) if(!indegree[i]) EnQueue(Q,i);原创 2017-11-18 17:48:33 · 2277 阅读 · 0 评论 -
有向无环图求最长路
原文地址:http://www.geeksforgeeks.org/find-longest-path-directed-acyclic-graph/给定一个带权有向无环图及源点S,在图中找出从S出发到图中其它所有顶点的最长距离。对于一般的图,求最长路径并不向最短路径那样容易,因为最长路径并没有最优子结构的属性。实际上求最长路径属于NP-Hard问题。然而,对于有向无环转载 2017-11-18 15:46:44 · 4757 阅读 · 1 评论 -
KMP算法(克努特-莫里斯-普拉特操作)简介
一,串的模式匹配算法子串的定位操作通常称作串的模式匹配(其中T称为模式串),是各种串处理系统中最重要的操作之一。求子串位置的定位函数Index(S,T,pos)。原创 2017-10-10 22:23:14 · 749 阅读 · 0 评论 -
广义表的首尾链表存储结构和扩展线性链表存储结构
//---广义表的首尾链表存储结构---//typedef enum{ATOM,LIST}ElemTag; //ATOM == 0:原子,LIST == 1:字表typedef struct GLNode{ ElemTag tag; //公共部分,用于区分原子节点和表节点 union share{ //原子节点和表节点的联合部分 AtomType atom; //原创 2017-10-14 17:31:43 · 3131 阅读 · 0 评论 -
双向链表-C/C++-多项式操作
如何用双向链表实现多项式操作:#include #include #include #include using namespace std;#define OK 1#define ERROR 0typedef int Status;typedef struct{ //项的表示 float coef; //系数 int expm; //指数}term,E原创 2017-09-23 20:12:26 · 737 阅读 · 0 评论 -
有向图无回路定长路径数求解
在以邻接矩阵方式存储的有向图G中求顶点i到顶点j的不含回路的,长度为k的路径数int way_num = 0;//路径数int i,j;//i为出发顶点,j为目标顶点int Way[k+1];//路径顶点向量Way[0] = i;Status Count_Way(MGraph G,int n, int start){ //寻找从start到j的路径数,n为已确定顶点数,初始调用Cou原创 2017-11-12 21:47:18 · 2741 阅读 · 0 评论 -
广度优先生成树
typedef struct QPNode{//特殊的节点类型,可以将节点编号和在树上的指针联系起来 int data; CSnode* pointer;}QPNode,*QPQueue;QPQueue Q;InitQueue(Q);//辅助队列void BFS_Tree(Graph G,int v,CSTree &T){ int w,k; bool first = true; /原创 2017-11-13 00:23:19 · 1959 阅读 · 0 评论 -
银行业务模拟
一道闹心的数据结构作业,请读者仔细读题,理清思路,这个问题的逻辑有点绕。/****************************************************文件名:事件驱动模拟创建人:张劲暾(OrdinaryCrazy)描述:银行用户模拟程序创建时间:20171015****************************************原创 2017-10-26 19:41:35 · 894 阅读 · 0 评论 -
对有向无环图顶点重新编号使其邻接矩阵变为下三角矩阵
对有向无环图顶点重新编号使其邻接矩阵变为下三角矩阵Status Change_into_LTM(MGraph &G){ //将采用邻接矩阵存储的有向无环图的邻接矩阵转换为下三角矩阵,并输出新旧编号对照表 int topologic_order[G.vexnum];//拓扑序列,反过来就是逆拓扑序列 //topologic_order[G.vexnum - 1 - 新序号] = 旧序号原创 2017-11-18 00:43:21 · 3343 阅读 · 1 评论 -
求有向图两点间所有简单路径
ALGraph G;char way[G.vexnum];way[0] = G.vertices[u].data;Status Findway_on_DG(ALGraph G,int u,int v,int found){ //在以邻接表存储的有向图G中输出从编号为u的顶点到编号为v的顶点的所有简单路径 //前found个顶点是已经确定的顶点,初始调用Findway_on_D原创 2017-11-18 11:11:30 · 11900 阅读 · 0 评论 -
空间复杂度O(1)的两个有序序列的归并
已知两个有序序列的a(1)---a(m)和a(m+1)----a(n),并且其中一个序列的记录个数小于根号n,用O(n)的时间和O(1)的空间完成他们的归并。原创 2017-12-17 10:38:45 · 1717 阅读 · 0 评论