数据结构
文章平均质量分 93
曲小鑫
我的学习笔记
展开
-
循环链表范例(约瑟夫问题)
从N个人中选出一个领导人,方法如下:所有人排成一个圆圈,按顺序每隔第M个人淘汰出局,然后剩下的人聚拢重新形成圆圈,找出最后剩下的那个人参考:《算法:C语言实现》 P52#include #include typedef int elem_type;typedef struct Node node;struct Node{ elem_type elem; node*原创 2015-01-12 21:00:20 · 582 阅读 · 0 评论 -
二叉树各种操作的总结
求二叉树中的节点个数求二叉树中叶子节点的个数求二叉树的深度求二叉树第K层的节点个数递归遍历前序中序后序非递归遍历前序中序后序层序1 前序遍历2 中序遍历3 后序遍历4 层序遍历将二叉查找树变为有序的双向链表判断两棵二叉树是否结构相同判断二叉树是不是平衡二叉树判断二叉树是否是搜索二叉树求二叉树中两个节点的最低公共祖先节点求二叉树中节点的最大距离由前序遍历序列和中序遍历序列重建二叉树原创 2015-07-26 11:43:48 · 5674 阅读 · 1 评论 -
二叉树遍历的非递归实现
本文和该篇文章 leetcode | 二叉树的前序遍历、中序遍历、后续遍历的非递归实现有不同的实现方式,此文章的非递归遍历实现算法,易于理解和实现。包含插入、遍历、统计树中节点的个数、统计树的深度等操作。 遍历操作包含: - 迭代(非递归)实现的前序、中序、后序、层序遍历。其中前序和中序,一个是先访问在入栈、一个是先入栈后访问有极大的相似性; 其中后序遍历使用了双栈操作,使思想简化易于实现原创 2015-06-24 19:09:19 · 710 阅读 · 0 评论 -
leetcode | 单链表逆序 Reverse Linked List
题目:Reverse Linked List单链表逆序迭代实现 第二个题目是很经典的“单链表逆序”问题。很多公司的面试题库中都有这道题,有的公司明确题目要求不能使用额外的节点存储空间,有的没有明确说明,但是如果面试者使用了额外的节点存储空间做中转,会得到一个比较低的分数。如何在不使用额外存储节点的情况下使一个单链表的所有节点逆序?我们先用迭代循环的思想来分析转载 2015-05-08 10:34:13 · 3235 阅读 · 0 评论 -
伸展树 - 二叉搜索树的扩展2
目录伸展树的介绍伸展树的C实现1 节点定义2 旋转3 伸展树的伸展4 搜索4 伸展树的插入和删除全部代码和参考资料1. 伸展树的介绍伸展树(splay tree)是一种搜索二叉树,它能在O(log n)O(log\ n)内完成插入、查找和删除操作。 (1)伸展树满足搜索二叉树的性质,左子节点小于根节点,右子节点大于等于根节点。 (2)伸展树独有特点:当某个节点被访问时,伸展树会通原创 2015-04-30 10:47:12 · 1285 阅读 · 0 评论 -
AVL平衡树 - 二叉搜索树的扩展1
1. AVL树的介绍AVL树是根据它的发明者G.M. Adelson-Velsky和E.M. Landis命名的。 它是最先发明的自平衡二叉查找树,也被称为高度平衡树。相比于”二叉查找树”,它的特点是:AVL树中任何节点的两个子树的高度最大差别为1。 如上图(左):非AVL树,如对节点9,左子树高度为0,右子树高原创 2015-04-28 20:08:27 · 850 阅读 · 0 评论 -
搜索(2):二叉搜索树 BST 和 根插法
二分搜索二叉搜索树1 二叉搜索树的初始化插入搜索2 使用BST排序3 BST上根节点的插入insert4 BST上的选择select操作划分操作5 BST上的删除delete操作6 两棵BST的连接joinBST的优缺点参考资料和所有代码1. 二分搜索将分治法应用于基于数组符号表的顺序搜索中,可以大大降低大型数据集合的搜索时间。 把数据集合分成两部分,确定搜索关键字属于哪一部分原创 2015-04-14 10:24:34 · 1638 阅读 · 0 评论 -
优先队列之 二项堆
1 定义二项堆(Binomial Heap): 二项堆(Binomial Heap)是二项树(Binomial Tree)的集合(collection),所以势必要先简要介绍下二项树。关于堆(最小堆)的相关知识,作者已经在堆排序有介绍可以点击查看,这里就不多枚举了。 二项树(Binomial Tree): 二项树(Binomial Tree)是一组多分支树的序列,二项树转载 2015-04-08 10:26:53 · 1351 阅读 · 0 评论 -
散列(1) 简要描述和链地址法
1. 散列的定义犹如关键字索引,我们把带有关键字ii的元素存储到表的第ii个位置,使其可以直接访问。关键字索引的算法不是比较关键字值进行比较,而是以关键字值作为数组的下标索引。我们对关键字索引搜索算法进行扩展,得到散列(Hash)搜索算法:散列(Hash)搜索算法 试图通过算术运算将关键字的值转换成表中的地址来直接引用表中的元素;而不是像在其他数据结构中比较搜索关键字的值与元素中关键字的值来实现搜索原创 2015-04-22 15:42:06 · 2675 阅读 · 0 评论 -
深度搜索和广度搜索 - 图的遍历
图的连接表示深度搜索广度搜索DFSBFS原创 2015-03-07 11:39:27 · 1786 阅读 · 0 评论 -
散列(2)线性探测法和双重散列法
接上篇 散列的简要描述和链地址法 解决散列冲突的方法:1. 线性探测法如果我们能够预测将要存入表中元素的数目,而且我们有足够的内存空间可以容纳带有空闲空间的所有关键字,那么使用链地址法是不值得的。我们依靠空的存储空间解决冲突:设计表长M大于元素数目N,开放地址法,最简单的开放地址法是线性探测法:初始化该符号表的实现将元素保存到大小是元素个数两倍的散列表中。void HashTableInit(in原创 2015-04-22 17:08:16 · 20288 阅读 · 1 评论 -
栈的实现——链表和数组
栈的链表实现: 栈的初始化(创建||清空)、入栈、出栈(获取栈顶元素)栈的数组实现——初始化、入栈、出栈、清空栈原创 2015-01-23 16:56:49 · 1846 阅读 · 0 评论 -
抽象数据类型总结:复数 adt 和 FIFO 队列adt
抽象数据类型(abstract data type, ADT)是指只通过接口进行访问的数据类型。我们将那些使用ADT的程序叫做客户,将那些确定数据类型的程序叫做实现。 客户程序除了通过接口中提供的那些操作外,并不访问任何数据值。数据的表示和操作都在接口的实现里,和客户完全分离。原创 2015-02-09 16:07:02 · 2304 阅读 · 0 评论 -
字符串基本处理操作:数组和指针实现 —— 不调用string函数库
自己手动实现的字符串基本处理操作索引数组版本 array_mode.h//统计长度int strlen1(const char s[]){ int i; for(i = 0; s[i] != 0; i++); return i;}//Copychar* strcpy1( char s2[], const char s1[]){ int i; for(i = 0; (s原创 2015-01-20 16:06:32 · 595 阅读 · 0 评论 -
二叉搜索树的Insert、Find、FindMin、FindMax、Delete、MakeEmpty
searchTree.h 功能实现/*==============================================二叉查找树(BSTree)的Insert、Find、FindMin、FindMax、Delete、MakeEmpty编译环境: Visual Studio 2012==============================================*/原创 2015-01-17 16:52:33 · 1686 阅读 · 0 评论 -
链表中头和尾节点/指针的常规用法:插入、删除、遍历
链表中头和尾节点/指针的常规用法循环、永远非空 头插入:head->next= head; 在x节点后插入t节点:t->next= x->next; x->next = t; 删除x后的节点:x->next= x->next->next; 遍历循环:(1) t =head;原创 2015-01-18 10:09:10 · 2510 阅读 · 0 评论 -
C语言单链表-19个功能函数
线性表链接存储(单链表)操作刚开始学习数据结构,找点题目练手,题目和部分源码参考 http://www.cnblogs.com/lifuqing/archive/2011/08/20/list.html原创 2014-12-30 09:55:49 · 829 阅读 · 1 评论 -
FIFO 队列的链表和数组实现
FIFO (First-in, First-out,先进先出)队列:当执行delete操作时事删除那些呆在队列中时间最长的元素。FIFO 队列是这样一个ADT,包含两个基本操作:插入(put)一个新的项、删除(get)一个最早插入的项。FIFO 队列的链表实现和数组实现原创 2015-02-03 15:59:17 · 4760 阅读 · 0 评论 -
优先队列和堆排序
优先队列和堆排序标签(空格分隔): 排序算法 数据结构优先队列和堆排序优先队列堆1 基于堆的算法初始化自底向上堆化自顶向下堆化插入删除一项2 堆排序优先队列全部代码1 优先队列普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (largest-in,first-原创 2015-04-08 09:55:00 · 1533 阅读 · 0 评论