python算法与数据结构-队列(44)】的更多相关文章

一.队列的介绍 队列的定义:队列是一种特殊的线性表,只允许在表的头部(front处)进行删除操作,在表的尾部(rear处)进行插入操作的线性数据结构,这种结构就叫做队列.进行插入操作的一端称为队尾,进行删除操作的一端称为队尾. 队列的类型:链式队列,即用链表实现的队列.静态队列:即用数组实现的队列. 队列的特性: 在队尾插入元素,在队首删除元素. FIFO(先进先出),就向排队取票一样. 二.队列的python代码实现 class Queue(object): def __init__(self…
Python算法与数据结构--求所有子数组的和的最大值 玄魂工作室-玄魂 玄魂工作室秘书 玄魂工作室 昨天 题目:输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 这个题目有多个解法,比如可以用一个二维数组存之前每个数据的和,然后在进行大小比较:但是这样时间负责度就是O(n2)了. 换个思路思考下,因为是要最大数,那么就不需要存储,只需要找最大值就可以了.但是为了找子序列的最大和,在遇到…
一.算法和数据结构 什么是算法和数据结构?如果将最终写好运行的程序比作战场,我们程序员便是指挥作战的将军,而我们所写的代码便是士兵和武器. 那么数据结构和算法是什么?答曰:兵法!故,数据结构和算法是一名程序开发人员的必备基本功,不是一朝一夕就能练成绝世高手的.冰冻三尺非一日之寒,需要我们平时不断的主动去学习积累. 二.算法的引入 先来看一道题:如果 a+b+c=1000,且 a*a+b*b=c*c(a,b,c 为自然数),如何求出所有a.b.c可能的组合? 普通解法: import time #…
queue 简介 队列是一种非常常见的数据结构,日常生活中也能经常看到.一个典型的队列如下图(图片来自 segmentfault): 可以看出队列和我们日常生活中排队是基本一致的.都遵循 FIFO(First In First Out)的原则. 实现 队列可以使用链表或者数组实现,使用链表的优点是扩容简单,缺点是无法通过索引定位元素,使用数组则相反,扩容不容易但是可以通过索引定位元素.文章采用双向链表实现.代码放在github: https://github.com/AceDarkknight/…
一.链表 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域. 相比于线性表顺序结构,操作复杂.由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O…
一.什么是数据结构 数据结构,直白地理解,就是研究数据的存储方式. 我们知道,数据存储只有一个目的,即为了方便后期对数据的再利用,就如同我们使用数组存储 {1,2,3,4,5} 是为了后期取得它们的值,因此,数据在计算机存储空间的存放,决不是胡乱的,这就要求我们选择一种好的方式来存储数据,而这也是数据结构的核心内容例如,要存储这样一组数据:{张三,张四,张五,张六,张七},数据之间具有这样的关系:张三是张四.张五的父亲,同时张四还是张六和张七的父亲,数据之间的关系如图所示: 对于存储之间具有复杂…
一.栈的介绍 栈作为一种数据结构,是一种只能在一端进行插入和删除操作.它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来).栈被使用于非常多的地方,例如浏览器中的后退按钮,文本编辑器中的撤销机制. 进栈的时候是1先进,然后是2.3.4.5.6,出栈的时候是先6出,然后是5.4.3.2.1 二.栈中常用的方法 作为一个栈(用stack来表示),最基本的方法有下面几个: stack.push(e): 将元素e添加到S…
一.树的定义 树是一种非线性的数据结构,是由n(n >=0)个结点组成的有限集合.如果n==0,树为空树.如果n>0,树有一个特定的结点,根结点根结点只有直接后继,没有直接前驱.除根结点以外的其他结点划分为m(m>=0)个互不相交的有限集合,T0,T1,T2,...,Tm-1,每个结合是一棵树,称为根结点的子树. 树(tree):是以边(edge)相连的结点(node)的集合,每个结点存储对应的值(value/data),当存在子结点时与之相连. 根节点(root):是树的首个结点,在相…
一.二叉树回忆 上一篇我们对数据结构中常用的树做了介绍,本篇博客主要以二叉树为例,讲解一下树的数据结构和代码实现.回顾二叉树:二叉树是每个节点最多有两个子树的树结构.通常子树被称作“左子树”(left subtree)和“右子树”(right subtree) 二.二叉树比链表好在哪里? 看看如下的数据:使用链表形式存放 我们要向查找数据6,需要从头开始查找,找到最后一个,查找比较麻烦.再来看看使用二叉树的形式存储 显然,我们很清楚自己要查找的目标大致会在那里出现: 例如查找的目标是6,那么我知…
本文涉及的源码,均在我的github.有两部分队列和循环队列.有问题的可以提个issue,看到后第一时间回复 1. 队列(Queue) 队列也是一种线性的数据结构, 队列是一种先进先出的数据结构.类似于生活中的排队买东西,先进入队列的人可以先购买到东西.这次的队列具体实现依然会采用之前自己封装好的数组,具体的优势依然是我们可以清晰的算出每次操作的时间复杂度.对于基本的队列而言,主要包含两个基本的操作入队(enqueue)和出队(dequeue). 对于队列而言,入队发生在尾部,出队发生在首部,队…