数据结构
文章平均质量分 81
Brent-CCNU
这个作者很懒,什么都没留下…
展开
-
哈希表——分离链接法
哈希表又称散列表,是根据关键值而直接进行访问的数据结构。哈希表的实现主要是散列函数和解决冲突。散列函数有:直接寻址法、数字分析法、平法取中法、折叠发、随机数法、除留余数法(严蔚敏版数据结构)。处理冲突的方法有:分离链接法(separate chaining)又称链地址法、开放寻址法、再散列法、建立公共溢出区。本文主要将的是分离链接法的实现。原创 2013-09-06 15:45:50 · 3899 阅读 · 1 评论 -
优先队列——左式堆的实现
零路径长度(null path length, NPL),NPL(X)定义为从X到一个没有两个儿子的节点的最短路径的长。因此具有0个或1个儿子的节点的NPL为0,而NPL(NULL) = -1。左式堆性质是:对于队中的每一个节点X,左儿子的零路径长至少与右儿子的零路径长一样大。左式堆与二叉堆具有相同的堆序性质,惟一的区别在于左式堆不是理想平衡的,而实际上是趋于非常不平衡的。原创 2013-09-19 14:53:48 · 1191 阅读 · 0 评论 -
二叉树非递归遍历C语言实现
二叉树非递归遍历实现——C语言实现二叉树非递归遍历:前、中、后序三种遍历需要用到栈,层序遍历需要用到队列。首先用c语言实现栈和队列,然后再实现二叉树的非递归遍历编程环境:Visual Studio 2010栈的实现stack.:前面有一章写过栈的实现,这里重新贴一下代码extern struct TreeNode;typedef struct TreeNode *ElementT原创 2013-09-18 15:05:03 · 3558 阅读 · 0 评论 -
平衡二叉树——AVL树的实现
AVL树是最先发明的自平衡二叉查找算法,是平衡二叉树的一种。在AVL中任何节点的两个儿子子树的高度最大差别为1,所以它又被成为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来平衡这棵树。假设把AVL树构造过程中需要重新平衡的节点叫做α。由于任意节点最多有两个儿子,因此高度不平衡时,α点的两颗子树的高度差2。这种不平衡可能出现在下面这四原创 2013-09-05 10:44:35 · 2101 阅读 · 0 评论 -
二叉查找树(Binary Search Tree)的实现
使二叉树成为二叉查找树的性质是,对于树中的每个节点X,它的左子树中所有关键字值小于X的关键字值,而它的右子树中所有关键字值大于X的关键字值。例如如下图所示的二叉树即为二叉查找树二叉查找树的声明tree.htypedef int ElementType;#ifndef TREE_H#define TREE_Hstruct TreeNode{ ElementType El原创 2013-09-03 14:51:47 · 1013 阅读 · 0 评论 -
队列的实现
队列的实现队列实现跟栈相似,有两种实现方式,一种是用链表实现,一种使用数组实现。原创 2013-09-02 18:07:38 · 715 阅读 · 0 评论 -
优先队列(堆)——二叉堆的实现
一般数据结构中的堆指的是二叉堆(Binary heap)。堆是一棵完全二叉树,可用数组来表示。对于数组中任意位置i上的元素,其左儿子在位置2i上,右儿子在左儿子后的单元(2i+1)中,它的父亲在位置[i/2](整数除法)上。binheap.h函数声明原创 2013-09-08 19:57:40 · 1216 阅读 · 0 评论 -
栈的实现
栈的实现:栈的链式实现、栈的数组实现、O(1)实现FindMin()、双向栈的实现需要定义几个头文件:fatal.h//实现错误处理#include #include #define FatalError(str) fprintf(stderr, "%s\n", str),exit(1)stack.h//栈函数声明(用于栈的链式实现、栈的数组实现、O(1)实现FindMin())#i原创 2013-09-01 19:50:26 · 1079 阅读 · 0 评论 -
哈希表——开放定址法
上一节讲了利用链表来处理冲突的方法——分离链接法。本节讲另一种处理冲突的方法——开放定址法。开放定址法有三种常用的冲突解决方法:线性探测法、平方探测法、双散列。原创 2013-09-07 16:23:07 · 1815 阅读 · 0 评论 -
单链表应用——逆序输出单链表中的元素
上一篇文章主要实现了单链表的基本操作,这篇文章主要讲的是单链表的具体应用1.单链表的逆序输出1)递归方式逆序输出链表#include #include #include #include "mylist.h"//在上一篇中有void PrintList(List L){ Position P = L; assert(L != NULL); do { P = Ne原创 2013-09-01 19:18:06 · 1960 阅读 · 0 评论 -
数据结构——单链表
为了找工作,现在有重新拿起了阔别已久的数据结构。《数据结构》严蔚敏C版、《大话数据结构》、《数据结构与算法分析——C语言描述》,这是比较流行的三本C语言实现数据结构的三本书。《数据结构》严版,是类C语言(伪代码)的描述方法,比较容易理解,适合理论学习、应付考试,但是如果用C语言具体实现的话,若C基础不牢固,指针经常容易混淆,尤其是初学者。《大话数据结构》这本跟严蔚敏版数据结构基本相同,是严版的一个原创 2013-08-29 20:49:32 · 1792 阅读 · 0 评论 -
单链表应用——La∪Lb或La∩Lb
求两个有序单链表的并集(La∪Lb)List Union(List La, List Lb){ List resultList; Position pa, pb, pResult; assert(La != NULL && Lb != NULL); pa = La->Next; pb = Lb->Next; InitList(&resultList); pResult = r原创 2013-09-01 19:25:26 · 1347 阅读 · 0 评论 -
单链表应用——从无头单链表中删除节点
题目来自《编程之美》P266 “从无头链表中删除节点”假设有一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(不是第一个,也不是最后一个),请讲该节点删除解析:由于是单链表并且没有头指针,无法根据当前的节点找到该节点的前驱,这里可采用数组中删除元素的方法即移动元素。将当前节点pCurrent的值赋值为pCurrent->Next的值,然后删除pCurrent->Next。ty原创 2013-09-01 19:06:23 · 1242 阅读 · 0 评论 -
排序
这里只是列出了常用的几种排序算法例如:冒泡排序、直接插入排序、简单选择排序、希尔排序、堆排序、归并排序、快速排序。下面将给出各种排序算法的基本思想以及实现代码。下面这两个自定义头文件在后面的实现过程中要用到,先给出来fatal.h定义错误处理#include #include #define FatalError(str) fprintf(stderr, "%s\n", str), ex原创 2013-09-11 15:04:51 · 957 阅读 · 0 评论