![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 67
xtx1990
新一代年轻人
展开
-
avl平衡二叉树
在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。AVL树的基本操作一般涉及运作同在不平衡的二叉查找树所运作的同样的算法。也就是平衡二叉树和二叉查找树一般结合起来使用。二叉查找树(Binary Search Tree,又称二叉排序树),或者是一棵空树,或者是具有下列性质的二叉树:1. 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;原创 2012-08-30 16:01:57 · 597 阅读 · 0 评论 -
栈的实现—由链表实现
#include #include typedef int datatype;typedef struct _node_{ datatype data; struct _node_ *next;} linkstack;linkstack *CreateEmptyStack_1(){ linkstack *s; s = (linkstack *)malloc(sizeof(links原创 2012-11-12 13:34:40 · 349 阅读 · 0 评论 -
树的存储与遍历
#include #include #define N 10typedef int datatype;typedef struct _btnode_{ datatype no; struct _btnode_ *lchild, *rchild;} bitree;typedef struct{ bitree *data[N]; int front, rear;} sequeue;原创 2012-11-12 13:34:52 · 336 阅读 · 0 评论 -
图的存储—数组
#include #include #include #define N 5typedef struct _node_{ int vertex; struct _node_ *next;} linknode, *linklist;typedef struct{ linklist front, rear;} linkqueue;linkqueue *CreateEmptyQueue(原创 2012-11-12 13:34:54 · 329 阅读 · 0 评论 -
约瑟夫问题—由线性链表实现
问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如:N=6, M=5, 被杀掉的人的序号为5,4,6,2,3.最后剩下1号 实现代码如下: #define N 3typedef struct _node_{ int data; struct _node_ *next;} linknode, *linklist;int main(原创 2012-11-12 13:34:35 · 484 阅读 · 0 评论 -
利用队列和栈实现球钟问题
球钟(Ball Clock)1.问题描述球钟是一个利用球的移动来记录时间的简单装置。它有三个可以容纳若干个球的指示器:分钟指示器,五分钟指示器,小时指示器。若分钟指示器中有2个球,五分钟指示器中有6个球,小时指示器中有5个球,则时间为5:32。球钟的工作原理如下:分钟指示器最多可容纳4个球。每过一分钟,球钟就会从球队列的队首取出一个球放入分钟指示器,当放入第五个球时,在分钟指示原创 2012-11-12 13:34:49 · 544 阅读 · 0 评论 -
栈的实例—表达式求值
功能介绍:通过键盘输入表达式,程序运行得到结果,显示在屏幕上如:程序运行后,输入3*4 , 应该在屏幕上显示12 算法的设计:本次实验是表达式的求值,用中缀表达式直接求值,需要定义两个栈:对象栈和运算符栈。当自作向右扫描表达式的每一个符号时,若当前字符是运算对象,则入对象栈;是运算符时,若这个运算符比栈顶运算符高则入栈,继续向后处理,若这个运算符比栈顶运算符低则从对象栈出栈原创 2012-11-12 13:34:42 · 584 阅读 · 0 评论 -
队列的实现—由链表实现
#include #include typedef int datatype;typedef struct _node_{ datatype data; struct _node_ *next;} linknode, *linklist;typedef struct{ linklist front; linklist rear;} linkqueue;linkqueue *Crea原创 2012-11-12 13:34:47 · 278 阅读 · 0 评论 -
一些比较常见的算法复杂度
若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的节点都连续集中在最左边,这就是完全二叉树。500)this.width=500;" border=0> 性质:对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1性质四 具有n个结点的完全二叉树的深度为「log2n」+1 查找:1.原创 2012-11-12 13:38:09 · 922 阅读 · 0 评论 -
最大堆-插入/删除/排序-图解
原文地址:http://www.java3z.com/cwbwebhome/article/article1/1362.html?id=4745 堆有最大堆和最小堆之分,最大堆就是每个节点的值都>=其左右孩子(如果有的话)值的完全二叉树。最小堆便是每个节点的值都 设有n个元素的序列{k1,k2,...,kn},当且仅当满足下列关系时,称之为堆。 堆的三种基本操作(以下以转载 2012-12-07 11:08:16 · 1527 阅读 · 0 评论 -
图解数据结构(10)——排序
十四、排序(Sort)这可能是最有趣的一节。排序的考题,在各大公司的笔试里最喜欢出了,但我看多数考得都很简单,通常懂得冒泡排序就差不多了,确实,我在刚学数据机构时候,觉得冒泡排序真的很“精妙”,我怎么就想不出呢?呵呵,其实冒泡通常是效率最差的排序算法,差多少?请看本文,你一定不会后悔的。1、冒泡排序(Bubbler Sort)前面刚说了冒泡排序的坏话,但冒泡排序也有其优点,转载 2012-12-07 11:34:28 · 364 阅读 · 0 评论 -
栈的实现—由数组实现
#include #include #define N 6typedef int datatype;typedef struct{ datatype data[N]; int top;} seqstack;seqstack *CreateEmptyStack_1(){ seqstack *s; s = (seqstack *)malloc(sizeof(seqstack));原创 2012-11-12 13:34:38 · 295 阅读 · 0 评论 -
线性表—由链表实现
#include #include typedef int datatype;typedef struct _node_{ datatype data; struct _node_ *next;} linknode, *linklist;linklist CreateEmptyLinklist_1(){ linklist h; h = (linklist)malloc(sizeof原创 2012-11-12 13:34:33 · 295 阅读 · 0 评论 -
堆排序
二叉堆是一种特殊的堆,二叉堆是完全二叉树。二叉堆满足堆特性:父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值,且每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆。当父结点的键值总是小于或等于任何一个子节点的键值时为最小堆。二叉堆一般用数组来表示。例如,根节点在数组中的位置是1,第n个位置的子节点分别原创 2012-08-30 16:02:39 · 382 阅读 · 0 评论 -
伸展树splay tree
伸展树实际上还是二叉查找树。展树,或者叫自适应查找树,是一种用于保存有序集合的简单高效的数据结构。伸展树实质上是一个二叉查找树。允许查找,插入,删除,删除最小,删除最大,分割,合并等许多操作,这些操作的时间复杂度为O(logN)。由于伸展树可以适应需求序列,因此他们的性能在实际应用中更优秀。假设想要对一个二叉查找树执行一系列的查找操作。为了使整个查找时间更小,被查频率高的那些条目就应当经常转载 2012-08-30 16:45:43 · 792 阅读 · 0 评论 -
红黑树的作用
红黑树和AVL树一样都对插入时间、删除时间和查找时间提供了最好可能的最坏情况担保。这不只是使它们在时间敏感的应用如即时应用(real time application)中有价值,而且使它们有在提供最坏情况担保的其他数据结构中作为建造板块的价值;例如,在计算几何中使用的很多数据结构都可以基于红黑树。 红黑树在函数式编程中也特别有用,在这里它们是最常用的持久数据结构之一,它们用来构造关联原创 2012-08-31 15:32:49 · 4879 阅读 · 0 评论 -
Trie树(字典树)
作者:July、yansha。出处:http://blog.csdn.net/v_JULY_v 。 转自: http://blog.csdn.net/v_july_v/article/details/6897097 引言 常关注本blog的读者朋友想必看过此篇文章:从B树、B+树、B*树谈到R 树,这次,咱们来讲另外两种树:Tire树与后缀树。不过,在此之前,先来看两转载 2012-08-23 15:01:02 · 654 阅读 · 0 评论 -
数据结构:最小堆/哈希表/二叉树/平衡二叉树/红黑树的意义(什么情况下使用)
接触堆数据结构是在排序里面讲的,空间复杂度O(1),时间复杂度O(NlogN),但是在实践中还是不如快速排序(好像快速排序可以更好的利用硬件特性)。堆 的意义就在于:最快的找到最大/最小值,在堆结构中插入一个值重新构造堆结构,取走最大/最下值后重新构造堆结构其时间复杂度为O(logN),而其他方法最少为O(N).堆实践中用途不在于排序,其主要用在调度算法中,比如优先级调度,每次取优先级最高的,时间转载 2012-09-03 16:45:29 · 3087 阅读 · 0 评论 -
线性表—由数组实现
#include #include #define MAX 6typedef int datatype;typedef struct{ datatype data[MAX]; int last;} sqlist;sqlist *CreateEmptyList_1(){ sqlist *L; L = (sqlist *)malloc(sizeof(sqlist)); L->las原创 2012-11-12 13:34:31 · 304 阅读 · 0 评论 -
队列的实现—由数组实现
#include #include #define N 6typedef int datatype;typedef struct { datatype data[N]; int front; // points to the postion before the first element of queue int rear; // points to the last ele原创 2012-11-12 13:34:45 · 321 阅读 · 0 评论 -
图的存储—链表
#include #include #define N 5typedef struct _node_{ int vertex; struct _node_ *next;} linknode, *linklist;void AddEdge(linklist h, int vertex){ linklist p; while ((h->next != NULL) && (h->next原创 2012-11-12 13:34:56 · 582 阅读 · 0 评论 -
利用图求最短路径
#define N 6#define M 1int main(){ int i, count, startnode, min, path; int dist[N], s[N] = {0}, array[N][N] = {{ 0, 20, 15, M, M, M}, { 2, 0, 4, M, 10, 30}原创 2012-11-12 13:34:58 · 338 阅读 · 0 评论 -
快速排序实现
#include #define N 8void quicksort(int s[], int low, int high){ int key, i = low, j = high; key = s[i]; while (i { while ((i = key)) j--; if (i while ((i if (i } s[i] = key; if (i-1 >原创 2012-11-12 13:35:00 · 283 阅读 · 0 评论 -
图解数据结构(5)——散列法及哈希表
七、哈希表(Hash Table)及散列法(Hashing)数组的特点是:寻址容易,插入和删除困难;而链表的特点是:寻址困难,插入和删除容易。那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提起的哈希表,哈希表有多种不同的实现方法,我接下来解释的是最常用的一种方法——拉链法,我们可以理解为“链表的数组”,如图:左边很明显是个数转载 2012-12-07 13:10:26 · 545 阅读 · 0 评论