数据结构
小布归来了
这个作者很懒,什么都没留下…
展开
-
数据结构与算法的基本概念
程序 = 数据结构 + 算法数据结构只是静态的描述了数据元素之间的关系。高效的程序需要在数据结构的基础上设计和选择算法总结:算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体数据结构数据是一个抽象的概念,将其进行分类后得到程序设计语言中的基本类型。如:int,float,char等。数据元素之间不是独立的,存在特定的关系,这些关系便是结构。数据结构指数据对象中数据元素之间的...原创 2019-06-13 17:17:47 · 242 阅读 · 0 评论 -
搜索与二分法查找
搜索定义搜索是在一个项目集合中找到一个特定项目的算法过程。搜索通常的答案是:真的或假的,表示该项目是否存在。搜索的几种常见方法顺序查找、二分法查找、二叉树查找、哈希查找二分法查找二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置...原创 2019-06-24 17:56:34 · 435 阅读 · 0 评论 -
二叉树的遍历
树遍历的概念所谓遍历是指对树中所有结点的信息的访问,即依次对树中每个结点访问一次且仅访问一次,我们把这种对所有节点的访问称为遍历 (traversal)。树遍历的种类那么树的两种重要的遍历模式是深度优先遍历和广度优先遍历,深度优先一般用递归广度优先一般用队列一般情况下能用递归实现的算法大部分也能用堆栈来实现。深度优先遍历定义对于一颗二叉树,深度优先搜索(Depth First...原创 2019-07-02 17:38:26 · 194 阅读 · 0 评论 -
快速排序 (Quick Sort)
定义快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。步骤:从数列中挑出一个元素,称为"基准"(pivot)重新排序数列,所有元素比基...转载 2019-06-18 19:01:43 · 573 阅读 · 0 评论 -
二叉树
二叉树的基本概念二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)二叉树的性质(特性)性质1: 在二叉树的第i层上至多有2^(i-1)个结点(i>0)性质2: 深度为k的二叉树至多有2^k - 1个结点(k>0)性质3: 对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,...原创 2019-07-01 16:29:20 · 467 阅读 · 0 评论 -
插入排序 (Insert Sort)
定义插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。插入排序分析实现def insert_sort(alist): # 从第二个位置,即下标为1的元素开始向前插入...转载 2019-06-17 18:30:33 · 837 阅读 · 0 评论 -
选择排序 (Selection sort)
定义选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被...原创 2019-06-17 17:25:50 · 199 阅读 · 0 评论 -
冒泡排序 (Bubble Sort)
定义冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序算法的运作如下:比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。对每一对相邻元素...原创 2019-06-17 16:23:17 · 7528 阅读 · 0 评论 -
排序 Sorting
定义排序算法(英语:Sorting algorithm)是一种能将一串数据依照特定顺序进行排列的一种算法。排序算法的稳定性稳定性:稳定排序算法会让原本有相等键值的纪录维持相对次序。也就是如果一个排序算法是稳定的,当有两个相等键值的纪录R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前。当相等的元素是无法分辨的,比如像是整数,稳定性并不是一个问题。然而,假设以下的数对...原创 2019-06-17 16:14:44 · 153 阅读 · 0 评论 -
队列 Queue
队列定义队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种**先进先出的(First In First Out)**的线性表,简称FIFO。允许插入的一端为队尾,允许删除的一端为队头。队列不允许在中间部位进行操作!假设队列是q=(a1,a2,……,an),那么a1就是队头元素,而an是队尾元素。这样我们就可以删除时,总是从a1开始,而插入时,总是在队...原创 2019-06-17 16:00:54 · 140 阅读 · 0 评论 -
栈 Stack
栈栈(stack),有些地方称为堆栈,是一种容器,可存入数据元素、访问元素、删除元素,它的特点在于只能允许在容器的一端(称为栈顶端指标,英语:top)进行加入数据(英语:push)和输出数据(英语:pop)的运算。没有了位置概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默认的访问顺序。由于栈数据结构只允许在一端进行操作,因而按照**后进先出(LIFO, Last ...原创 2019-06-17 15:48:16 · 156 阅读 · 0 评论 -
链表Linked List
为什么需要链表顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时又需要进行数据的搬迁,所以使用起来并不是很灵活。链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。链表的定义链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是不像顺序表一样连续存储数据,而是在每一个节点(数据存储单元)里存放下一个节点的位置信息(即地址)。链表分类单向链...原创 2019-06-17 14:46:10 · 175 阅读 · 0 评论 -
归并排序 (Merge Sort)
归并排序定义归并排序是采用分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组,再合并数组。将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可。归并排序的分析def merge_sort(alist): if len(alist) ...原创 2019-06-20 17:54:31 · 127 阅读 · 0 评论 -
希尔排序 (Shell Sort)
定义希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。希尔排序过程希尔排序的基本思想是:将数组...原创 2019-06-18 20:44:21 · 144 阅读 · 0 评论 -
顺序表
顺序表一组序列元素的组织形式,我们可以将其抽象为线性表。一个线性表是某类元素的一个集合,还记录着元素之间的一种顺序关系。线性表是最基本的数据结构之一,在实际程序中应用非常广泛,它还经常被用作更复杂的数据结构的实现基础。根据线性表的实际存储方式,分为两种实现模型:顺序表,将元素顺序地存放在一块连续的存储区里,元素间的顺序关系由它们的存储顺序自然表示。链表,将元素存放在通过链接构造起来的一系...原创 2019-06-13 19:09:56 · 176 阅读 · 0 评论 -
树与树算法
树的概念树(英语:tree)是一种抽象数据类型(ADT)或是用作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。树的特点:每个节点有零个或多个子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父节点;除了根节点外,...原创 2019-06-27 18:07:30 · 133 阅读 · 0 评论