数据结构
文章平均质量分 96
bluesliuf
bluesliuf@163.com
展开
-
C语言实现七大查找算法(二)
在前面的博文中,我们介绍了5种查找算法,本文主要介绍哈希表及哈希查找算法。在介绍哈希查找算法之前,我们需要详细了解什么是哈希表及其构造实现方法。哈希表哈希表的基本思想我们知道,数组的最大特点就是:寻址容易,插入和删除困难;而链表正好相反,寻址困难,而插入和删除操作容易。那么如果能够结合两者的优点,做出一种寻址、插入和删除操作同样快速容易的数据结构。这就是哈希表创建的基本思想,哈希表就是这样...原创 2019-04-03 21:19:59 · 1838 阅读 · 2 评论 -
树和二叉树的应用
本文主要介绍树和二叉树的应用,主要包含3个部分:二叉排序树、平衡二叉树和哈夫曼树和哈夫曼编码。二叉排序树(BST)定义二叉排序树(简称BST),也称二叉查找树。二叉排序树或者是一棵空树,或者是一棵有下列特性的非空二叉树:若左子树非空,则左子树上所有结点关键字的值均小于根结点的关键字值若右子树非空,则右子树上所有结点关键字的值均大于根结点的关键字值左、右子树本身也分别是一棵二叉排序树...原创 2019-04-07 20:27:47 · 1179 阅读 · 0 评论 -
C语言实现七大查找算法(一)
本文主要介绍数据结构中的查找算法,主要介绍顺序查找、折半查找(二分查找)、树表查找、分块查找、哈希查找(散列)。其他的一些查找算法也会有所介绍。查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素。查找表(Search Table):由同一类型的数据元素构成的集合关键字(Key):数据元素中某个数据项的值,又称为键值主键(Primary Key)...原创 2019-04-03 15:04:24 · 19498 阅读 · 0 评论 -
Python实现栈和队列
本文主要用python语言实现栈和队列的基本操作。python实现栈的基本操作"""以列表的形式简单实现栈栈:先进后出"""class Stack: def __init__(self): self.stack = [] # 初始化 def is_empty(self): return not bool(self.stack) # ...原创 2019-04-15 21:42:31 · 235 阅读 · 0 评论 -
Python实现二叉树遍历的递归和非递归算法
本文主要用python实现二叉树的4种遍历算法,除层次遍历外,前序、中序和后序遍历分别包含递归和非递归2种实现方式。前序遍历 # -----------前序遍历 ------------ # 递归算法 def pre_order_recursive(self, T): if T == None: return print(...原创 2019-04-15 21:43:38 · 3452 阅读 · 0 评论 -
剑指offer(一)
layout: post # 使用的布局(不需要改)title: 剑指offer(一)date: 2019-04-16 21:50:22type: categoriesauthor: Liu Fantags:jian offercategories: 在线编程mathjax: truecatalog: truetop: 100...原创 2019-04-17 13:22:54 · 304 阅读 · 0 评论 -
剑指offer(二)
剑指offer编程(6-10)旋转数组中的最小数字题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路一直接遍历数组,如果一个数比前一个数小,该数即为最小,...原创 2019-04-17 13:24:08 · 186 阅读 · 0 评论 -
剑指offer(三)
剑指offer(11-15)。二进制中1的个数题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路如果是负数,先获取它的补码形式,然后统一为正数处理。发现,当一个数大于0时,不停让它与它的前一位进行按位与操作,即可获得其二进制表示中1的个数。代码实现class Solution: def NumberOf1(self, n): # wr...原创 2019-04-17 13:24:55 · 211 阅读 · 1 评论 -
剑指offer(四)
剑指offer(16-20)。合并两个排序的链表题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路递归非递归代码实现class ListNode: def __init__(self, x): self.val = x self.next = None#递归方法class So...原创 2019-04-17 13:25:46 · 211 阅读 · 0 评论 -
剑指offer(五)
剑指offer(21-25)。栈的压入和弹出序列题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路借用一个辅助栈...原创 2019-04-17 13:26:55 · 213 阅读 · 0 评论 -
线索二叉树
本文主要介绍线索二叉树和树、二叉树、森林三者之间的相互转换。对于线索二叉树,这里只做简单介绍,着重还是要理解上篇博文中二叉树的各种遍历算法。线索二叉树基本概念遍历二叉树的实质就是对一个非线性结构进行线性化操作,使在这个访问序列中每一个结点(除第一个和最后一个)都有一个直接前驱和直接后继。传统的链式存储仅能体现一种父子关系,不能直接得到结点在遍历中的前驱和后继。通过观察,我们发现在二叉链表...原创 2019-04-07 16:27:19 · 487 阅读 · 0 评论 -
C语言实现二叉树遍历的递归和非递归算法
本文主要介绍二叉树的各种遍历方法。二叉树的遍历所谓二叉树的遍历,是指按某条搜索路径访问树中的每个结点,使得每个结点均被访问一次,而且仅被访问一次。由二叉树的递归定义可知,遍历一棵二叉树便要决定对根结点NNN、**左子树LLL和右子树RRR**的访问顺序。按照先遍历左子树再遍历右子树的原则,常见的遍历次序有:前序遍历:(N L R)中序遍历:(L N R)后序遍历:(L R L)这...原创 2019-04-06 21:27:42 · 21406 阅读 · 9 评论 -
数据结构之绪论
本文主要介绍数据结构中的一些基本知识,例如数据结构得划分、数据类型、算法等。 接下来的博客将详细介绍数据结构中的链表、栈和队列、树、查找、排序等算法。数据结构逻辑结构(算法设计)线性结构:线性表、栈、队列(一对一)非线性结构:树、图、集合(一对多、多对多)存储结构(算法实现) 物理结构数据的运算数据元素是数据的基本单位。数据类型原子类型: (值不可再分)结构类型:...原创 2019-03-30 10:28:40 · 139 阅读 · 0 评论 -
数据结构之线性表(顺序表示)
定义线性表是具有相同数据类型的n(n>=0)n(n>=0)n(n>=0)个数据元素的有限序列。其中nnn为表长,当n=0n=0n=0时,线性表是一个空表。若用LLL命名线性表,则一般表示如下:L=(a1,a2,...,ai,ai+1,..,an)L = (a_1,a_2,...,a_i,a_{i+1},..,a_n)L=(a1,a2,...,ai,a...原创 2019-03-30 14:59:52 · 509 阅读 · 0 评论 -
数据结构之线性表(链式表示)
在上篇博文中,我们介绍了线性表的顺序存储,本文将介绍其链式表示方式。由于顺序表的插入、删除操作都需要移动大量的元素,这极大的影响了运行效率,所以引进了线性表的链式表示。链式存储线性表时,不需要使用地址连续的存储单元,对线性表的插入删除操作只需要修改指针,不需要移动元素。我们将介绍4种链表形式:单链表双链表循环链表静态链表单链表线性表的链式存储又称单链表。它是通过一组任意的存储单...原创 2019-03-30 19:46:00 · 358 阅读 · 0 评论 -
数据结构之栈和队列(一)
本文主要介绍2种操作受限的线性表结构:栈(Stack)和队列(Queue),包括它们的概念和存储结构。除此之外,还会简单介绍一下特殊矩阵的压缩存储。栈(Stack)栈是只允许在一端进行插入或删除操作的线性表。它满足后进先出(LIFO)。栈的基本操作:InitStack(&S):初始化StackEmpty(S):判断栈是否为空Push(&S,x):进栈,若栈S未满,将...原创 2019-03-31 14:42:47 · 243 阅读 · 0 评论 -
C语言实现七大查找算法(三)
上一篇博文主要介绍了哈希查找算法,本文主要介绍树表查找算法。这是一类算法,主要包含二叉查找树、平衡查找树之2-3查找树、平衡查找树之红黑树(Red-Black Tree)、B树和B+树。本文主要弄懂各种查找树的思想,也附上了部分实现代码。代码有时间在详细研读,此处先记录下来。红黑树、B树和B+树还是有点难懂~ ~ ~,本文只是简要介绍了思想,具体实现见参考资料二叉树查找算法算法简介二叉查找...原创 2019-04-04 19:28:17 · 1181 阅读 · 0 评论 -
C语言实现八大排序算法(一)
本文主要介绍数据结构中常见的八大排序算法,冒泡排序、快速排序、直接插入排序、希尔排序、简单选择排序、堆排序、归并排序和基数排序。排序相描述排序分类:若排序过程中,所有的文件都是放在内存中处理的,不涉及数据的内外存交换,则称该排序算法是内部排序算法; 若排序过程中涉及内外存交换,则是外部排序。内部排序适合小文间,外部排序适用于不能一次性把所有记录放入内存的大文件。常见的分类算法还可以根据排序...原创 2019-04-05 15:21:33 · 55405 阅读 · 23 评论 -
数据结构之栈和队列(二)
在上篇博文中,我们了解了栈的节本原理和操作。本文主要介绍另外一种操作受限的线性表,队列(Queue)。队列(Queue)也是一种操作受限的线性表,它只允许在表的一端进行插入,而在另外一端进行删除,满足先进先出(FIFO)。队列的基本操作InitQueue(&Q):初始化QueueEmpty(Q):判断队列是否为空EnQueue(&Q,x):入队,若Q未满,将x加入,使...原创 2019-03-31 21:39:48 · 386 阅读 · 0 评论 -
C语言实现八大排序算法(二)
在这篇博文中,我们介绍了剩下4种排序算法,并将对所有的排序算法做一个总结。代码主要参见数据机构之十大排序,关于拓展里面的桶排序和计数排序,只了解了想法,并未自己实现,不过也给出了参考资料中别人的代码实现。选择排序(Selection Sort)基本思想在要排序的一组数中,选出最小(或者最大)的一个数与第111个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第222个位置的数交换,依...原创 2019-04-06 14:03:46 · 5112 阅读 · 2 评论 -
数据结构之树的基本概念
本部分主要介绍树的相关知识,将分为3篇博文介绍。本文将着重介绍二叉树的一些基本概念,以及在其基础上的一些特殊的树形式:满二叉树、完全二叉树、线索二叉树、二叉排序树、平衡二叉树等。树的基本概念树的定义树是N(N≥0)N(N \ge 0)N(N≥0)个结点的有限集合,N=0N=0N=0时,称为空树。NNN不为0时,树满足:有且仅有一个特定的称为根结点的结点当N≥1N \ge 1N≥1...原创 2019-04-06 19:00:55 · 455 阅读 · 0 评论 -
python实现十大排序算法(详解)
之前在这C语言实现八大排序算法(一)和C语言实现八大排序算法(二)2篇文章中,已经详细介绍了各种排序算法的思想,参考资料主要是用C语言实现的。本文主要用python语言再次实现十大排序算法。十大排序算法的复杂度及稳定性分析如下表所示:插入排序代码'''1. 从第一个元素开始,该元素可以认为已经被排序2.取出下一个元素,在已经排序的元素序列中从后向前扫描3.如果该元素(已排序)大...原创 2019-05-08 23:00:22 · 2125 阅读 · 0 评论