数据结构
xiaodu1997
A foolish man
展开
-
桶式排序(C语言版)
桶式排序是一种非常简单的排序方法,其过程不需要一次比较大小,对于非常稠密的数据,其效果会比较好。 具体思想从代码里面很容易看出,所以就不多说了#include <stdio.h>#define Maxn 10000int main(){ int Count[Maxn] = {0}; int N = 0; scanf("%d",&N); while(N--)原创 2016-10-11 22:13:56 · 438 阅读 · 0 评论 -
二项队列的简单实现
二项队列 二项队列也是优先队列的一种实现方式,之前有用左式堆和二叉堆来实现优先队列,不过二项队列与左式堆和二叉堆的不同在于二项队列能有效的支持合并/插入/DeleteMin操作,每次操作的最坏运行时间是O(log n),对于插入操作,平均是花费常数时间什么是二项队列 与左式堆和二叉堆不同的是,二项队列不是树,而是树的集合,也就是森林. 这个森林中,每个高度最多只有一棵树. 这里不再详细原创 2017-05-18 12:33:57 · 396 阅读 · 0 评论 -
左式堆的简单实现(C语言描述)
左式堆左式堆是优先队列的一种实现,它的目的主要是为了解决二叉堆的合并问题.(你将在后面看到左式堆是如何用递归来优美地进行合并的)零路径长把任意节点X的零路径长(null path length, NPL) Npl(X) 定义为从X到一个没有两个儿子的节点的最短路径长。因此,具有0个或1个儿子的节点的Npl值为0,而Npl(NULL)=-1。注意,任意节点的零路径长比它的各个儿子节点的最小值多1。堆序原创 2017-04-03 14:27:46 · 464 阅读 · 0 评论 -
优先队列的简单实现-二叉堆实现
二叉堆二叉堆简介 二叉堆是优先队列的一种实现方式 同二叉查找树一样,二叉堆也有结构性和堆序性结构性 堆是一棵除底层外完全被填满的树堆序性 使操作被快速执行的性质是堆序性。在这里,我们想实现的是快速找出最小值(最大值),因此最小值(最大值)应该在根上。 所以我们可以得出一个堆序性:在堆中,对于每一个节点X,X的父亲的值应该小于等于(大于等于)X的值。 如果你不知道二叉树这些知识,建原创 2017-01-21 20:08:06 · 668 阅读 · 0 评论 -
Floyd-Warshall算法求任意两点间的最短路(图论算法)
算法思路简介假设只使用顶点0~k和 i,j ,并且我们记顶点i到j的最短路径长为dp[ k + 1 ][ i ][ j ],k = -1表示只使用i,j,所以dp[ 0 ][ i ][ j ] = cost[ i ][ j ]. 只使用0~k时,有经过k和不经过k两种情况,所以dp[ k + 1 ][ i ][ j ] = min( dp[ k ][ i ][ j ] , dp[ k ][ i ]原创 2017-01-11 14:43:02 · 906 阅读 · 0 评论 -
优先队列--二叉堆实现
二叉堆### 二叉堆简介 二叉堆是优先队列的一种实现方式 同二叉查找树一样,二叉堆也有结构性和堆序性#### 结构性 堆是一棵除底层外完全被填满的树#### 堆序性 使操作被快速执行的性质是堆序性。在这里,我们想实现的是快速找出最小值(最大值),因此最小值(最大值)应该在根上。 所以我们可以得出一个堆序性:在堆中,对于每一个节点X,X的父亲的值应该小于等于(大于等于)X的值。 如果原创 2017-01-10 17:57:56 · 400 阅读 · 0 评论 -
散列表(平方探测法解决冲突)
用平方探测法来解决冲突的实现头文件:#ifndef HASHQUAD_H_INCLUDED#define HASHQUAD_H_INCLUDEDtypedef unsigned int Index;typedef Index Position;typedef int ElementType;struct HashTbl;typedef struct HashTbl *HashTable;Has原创 2016-12-14 17:02:33 · 2937 阅读 · 0 评论 -
AVL树的简单实现
AVL树是在二叉查找树的基础上加了一个平衡条件,目的是为了防止二叉查找树在某一边的深度过大而使效率降低 AVL树的关键是两个单旋转:左旋转和右旋转 双旋转也就是这两个旋转的组合旋转的话 用图是最好解释的 下面用从别人那里盗来的图来说明下吧 想搞明白的话,自己照着这个图里面的画一画就差不多了那么下面我就上代码了:头文件:#ifndef AVLTREE_H_INCLUDED#define A原创 2016-11-27 21:07:32 · 420 阅读 · 1 评论 -
Hash 散列表(分离链接法解决冲突)
分离链接法的思路是将散列到同一个值的所以元素保留到一个表中。头文件:#ifndef HASHSEP_H_INCLUDED#define HASHSEP_H_INCLUDEDstruct ListNode;typedef struct ListNode *Position;struct HashTbl;typedef struct HashTbl *HashTable;typedef int原创 2016-12-04 17:35:23 · 744 阅读 · 0 评论 -
链表实践—多项式ADT(数组实现)
这个ADT可以存储多项式系数,并进行相加,相乘等计算。 这个是用数组实现的版本。头文件代码:#ifndef POLYNOMIAL_H_INCLUDED#define POLYNOMIAL_H_INCLUDED#define MaxDegree 100struct P{ int CoeffArray[MaxDegree + 1]; int HighPower;};type原创 2016-10-08 17:41:22 · 1783 阅读 · 1 评论 -
Josephus问题的一种解法(链表实现)
这里并不是原始的Josephus问题,而是其“通用版”,而历史上的那个只是个特殊情况 下面直接给代码:#include <stdio.h>#include <stdlib.h>struct People;typedef struct People *PtrToPeople;struct People{ int Position; PtrToPeople Next;};原创 2016-10-30 15:38:36 · 331 阅读 · 0 评论 -
链表的简单实现(C语言版)
链表是一种简单的数据结构,其插入和删除的效率比较高链表定义(头文件):#ifndef NODE_H_INCLUDED#define NODE_H_INCLUDEDstruct Node;typedef struct Node * PtrToNode;typedef PtrToNode List;typedef PtrToNode Position;typedef int ElementTy原创 2016-10-06 23:29:59 · 2764 阅读 · 3 评论 -
链表-游标实现(C语言版)
如果用C/C++写链表的话,用指针会比较方便,但很多语言都没有指针,那么怎么实现比较好呢?游标是个不错的选择。在用指针实现的链表中,有这样两个特点: 1.数据存在一组结构体中,并且每个结构体都有指向下一个结构体的指针。 2.一个新的结构体可以通过malloc获取内存,也可以用free来释放内存。游标法也得满足这两个条件。满足条件1比较简单,用一个全局的结构体数组就行了;满足条件2原创 2016-10-16 14:59:23 · 2284 阅读 · 0 评论 -
二叉查找树的简单实现(C语言版)
老司机不多说,直接上代码 头文件:#ifndef BINARYTREE_FIND_H_INCLUDED#define BINARYTREE_FIND_H_INCLUDEDstruct TreeNode;typedef struct TreeNode *Position;typedef struct TreeNode *SearchTree;typedef int ElementType;S原创 2016-11-06 16:49:32 · 1852 阅读 · 0 评论 -
队列的数组实现(C语言描述)
队列也是一种简单却很有用的数据结构,其特点是先进先出,基本操作是enqueue(入列)和dequeue(出列) 下面给出数组实现的代码:#ifndef QUEUE_H_INCLUDED#define QUEUE_H_INCLUDEDstruct QueueRecord;typedef struct QueueRecord * Queue;typedef double ElementType;原创 2016-10-25 16:19:11 · 4304 阅读 · 0 评论 -
栈的数组实现(C语言版)
这次是用数组来实现栈,实现思路和方法都比较简单,就不多解释了,下面直接上代码:头文件:#ifndef STACKCURSOR_H_INCLUDED#define STACKCURSOR_H_INCLUDEDtypedef int ElementType;typedef struct StackRecord *Stack;int Isempty(Stack S);int IsFull(Sta原创 2016-10-23 16:05:11 · 537 阅读 · 0 评论 -
栈的链表实现(C语言版)
栈也是一种简单常用的数据结构,他的特点是先进先出。 现代化计算机将栈操作作为指令系统的一部分,栈也就有可能成为计算机科学中在数组之后最基本的数据结构。所以,栈的重要性就不用多说了。 其实现思路也比较简单,这里就不多解释了,直接看代码吧#include "Stack.h"#include <stdlib.h>struct Node{ ElementType Element; P原创 2016-10-22 09:21:38 · 373 阅读 · 0 评论