数据结构和算法基础
记录学习数据结构和算法的过程,期望用python和java两种语言实现相关代码。
Anthony_tester
这个作者很懒,什么都没留下…
展开
-
数据结构和算法-17-二叉树的广度优先遍历和二叉树节点插入操作
这篇来用代码实现一颗二叉树,在实现二叉树之前,我们需要分析,如何给一棵树添加元素,添加的规则,其实先要查找和判断节点,查找和判断节点的过程,我们使用了广度优先遍历方法。1.二叉树的广度优先遍历先摆放一颗二叉树思路1,我们先要构造一个个节点,节点我们前面使用过,Node, 这里也一样,只不过这个节点属性,除了一个元素,还有一个左子节点和右子节点这两个属性。例如构造A节点,元素存储是A...原创 2019-06-28 22:34:49 · 777 阅读 · 0 评论 -
数据结构和算法-16-树和二叉树的概念
这篇开始学习树这种数据结构,二叉树肯定听说过,还有什么红黑树,在JDK 1.8中HashMap就采用了红黑树实现。在学习这种数据结构算法之前,看看树的概念和分类。1.树的概念树(tree)是一种抽象数据类型(ADT)或是视作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一颗...原创 2019-06-27 20:50:14 · 449 阅读 · 0 评论 -
数据结构和算法-15-二分查找
前面学习了六种排序算法,接着学习搜索,搜索中使用最多一种简单查找方法就是二分查找。二分查找的特点是,先保证数列是有序排序,然后每次查找可以减少一半的范围,直到查到或者找不到目标元素为止。这个也是经常在面试中被要求手写这个查找代码,接着要你设计测试用例去测试你写的代码。1.二分查找定义二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好。其缺点就是要求待查表为有序表,且插入删...原创 2019-06-26 15:16:03 · 1444 阅读 · 0 评论 -
数据结构和算法-14-归并排序
前面一篇快速排序用到了递归,接下来的归并排序也需要使用递归思想。1.归并排序介绍归并排序(MergeSort)是才有分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组,再合并数组。将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小先把谁取出来,取了之后相应的指针往后移一位,然后再比较,直到一个数组为空,最后把另外一个数组的剩余部分复制过来即可。...原创 2019-06-25 16:38:13 · 341 阅读 · 0 评论 -
数据结构和算法-13-快速排序
这篇来学习下快速排序,快速排序是对冒泡排序的一种改进算法。1.快速排序定义快速排序(QuickSort),又称划分交换排序,通过一趟排序将要排序的数据分割成独立的两部分。其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按照此方法对两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。2.快速排序思想和图解快速排序步骤为:1.从数...原创 2019-06-24 21:33:36 · 636 阅读 · 0 评论 -
数据结构和算法-12-希尔排序
这一篇来学习希尔排序,希尔排序是直接插入排序的一种优化算法。1.希尔排序概念希尔排序(shell sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法,该方法因DL.Shell于1959年提出而得名。希尔排序是把纪录按下标的一定增量分组,对每组使用直接插入排序算法排序。随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整...原创 2019-06-24 21:11:46 · 479 阅读 · 0 评论 -
数据结构和算法-11-插入排序
继续学习简单排序算法中的第三种:插入排序,其实插入排序和选择排序很容易搞混淆。1.插入排序概念和原理插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素进行逐步向后挪位,为最新元素提供插入空间。2.插入排序图解...原创 2019-06-22 23:29:57 · 440 阅读 · 0 评论 -
数据结构和算法-10-选择排序
接着学习简单排序算法的第二种,叫选择排序。1.选择排序定义和优点选择排序(Selection Sort)是一种简单直观的排序算法。它的工作原理是这样的:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序系列的末尾。依次类推,直到所有全是均排序完毕。选择排序主要优点与数据移动有关。如果某个元素位于正确的最终...原创 2019-06-21 20:11:00 · 630 阅读 · 0 评论 -
数据结构和算法-9-冒泡排序
开始学习最简单的几个排序算法,学习完排序算法,就要学习二叉树。其实我曾经也想到过去刷题,但是我看一下题目之后,我还是觉得很有必要回来复习下数据结构和算法的入门基础知识。冒泡排序很重要,特别是对于测试人员,很多公司不能拿太复杂的算法去考察测试人员,冒泡就成了大概率要会写的代码。1.什么是冒泡排序冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素...原创 2019-06-21 13:34:48 · 783 阅读 · 0 评论 -
数据结构和算法-8-双向链表
这篇来学习一个更复杂的数据结构,双向链表,我们在前面单向链表知识基础上,来分析和看看在双向链表中相关方法的实现1.双向链表定义一种更复杂的链表是“双向链表”,每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值;而另一个指向下一个节点,当此节点为最后一个节点时,指向空值。2.操作方法is_empty() 链表是否为空length()链表长度t...原创 2019-06-14 22:41:55 · 371 阅读 · 0 评论 -
数据结构和算法-7-单向循环列表
前面一篇介绍了单链表,这个单链表是基础,这篇我们来看看单链表的变种,单向循环链表,和前面唯一的区别就是列表最后一个节点指向头节点,形成一个环形。1.单向循环列表单链表的一个变型是单向循环链表,链表中最后一个节点的next域不再为Node,而是指向链表的头节点,形成一个环。2.代码实现还是前面单链表的大部分方法的实现代码,先来看看头部插入元素和尾部插入元素,链表长度,判断为...原创 2019-06-14 14:35:36 · 1378 阅读 · 0 评论 -
数据结构和算法-6-链表和单链表的实现过程
这篇来学习单链表的结构和代码实现过程,重点要理解节点Node这个class的含义,一个节点包含两部分组成,数据和存储下一个节点的内存地址。1.链表的定义链表的定义链表(linked list)是一种常见的基础数据结构,是一种线性表,但是不像顺序表一样连续存储数据,而是在每一个节点(数据存储单元)里存放下一个节点的位置信息(即地址)。上图就是一个单链表的表示。2.单...原创 2019-06-13 23:21:00 · 536 阅读 · 1 评论 -
数据结构和算法-5-队列和双端队列
前面一篇我们用了顺序表实现了栈和相应方法,这篇我们来看看队列和双端队列的实现。1.队列还是用顺序表方式来实现一个队列,队列的特点就是尾部添加元素,头部删除元素,就是生活中排队的例子。Python实现过程# encoding:utf-8class Queue(object): """队列""" def __init__(self): s...原创 2019-06-13 19:23:37 · 1704 阅读 · 0 评论 -
数据结构和算法-4-栈和队列
这篇来学习什么栈和队列,以及栈和队列的基本特征,然后代码实现栈的实现1.栈栈(stack)也有叫堆栈,是一种容器,可存入数据元素,访问元素,删除元素,它的特点在于只能允许容器的一端(称为栈顶端,top)进行加入数据(push)和输出数据(pop)的运算。没有了位置概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默认访问顺序。由于栈数据结构只允许一端进行操作,因...原创 2019-06-07 11:01:30 · 504 阅读 · 0 评论 -
数据结构和算法-3-顺序表
这篇来学习下顺序表和顺序表在内存中的结构和顺序表的简单操作。顺序表是其他封装的数据结构的基础,了解这个之后,我们开始来学习常见数据结构。1.顺序表和链表的引出在程序中,经常需要将一组(通常是同为某个类型的)数据元素作为整体管理和使用,需要创建这种元素组,用变量纪录它们,传进传出函数等。一组数据中包含的元素个数可能发生变化。(可以增加或删除元素)对于这种需求,最简单的解决方案便是将...原创 2019-06-07 11:01:21 · 684 阅读 · 0 评论 -
数据结构和算法-2-最坏时间复杂度和计算规则
本篇来学习一些计算时间复杂度相关的概念和规则,然后理解一些常见的时间复杂度。1.最坏时间复杂度分析算法时,存在几种可能的考虑:算法完成工作最少需要多少基本操作,即最优时间复杂度。算法完成工作最多需要多少基本操作,即最坏时间复杂度。算法完成工作平均需要多少基本操作,即平均时间复杂度。对于最优时间复杂度,其价值不大,因为它没有提供什么有用信息,其反映的只是最乐观最理想的情况,没...原创 2019-06-07 11:01:09 · 4169 阅读 · 0 评论 -
数据结构和算法-1-算法的引入和算法时间复杂度
最近有时间来系统学习下常见数据结构和算法的知识,所以,还是通过纪录笔记放在博客的方式来督促自己学习。算法对于很多程序员都接触不到的,何况是一个测试人员。但是面试过程中,多多少少都有算法题的面试。所以,学习算法,短期来看是为了跳槽准备,长期来看,是锻炼一个人解决问题的思路的提升的一个途径。1.算法的引入来看一个问题:如果 a+b+c = 1000, 且 a^2 + b^2 = c^2(...原创 2019-06-07 11:00:57 · 1327 阅读 · 1 评论