Java 算法(背包,队列和栈)】的更多相关文章

数据结构队列 首先明确一下队列的概念. 队列是一种有序列表,使用数组的结构来存储队列的数据. 队列是一种先进先出的算法.由前端加入,由后端输出. 如下图: ​ 第一个图 第二个图 第三个图 这就是队列的形状. 他的本体是一个空空的数组(Queue)加上两个指在同一个位置的指针(rear,front). 这个数组有长度的限制(因为是java算法,所以数组长度有限制,必须在声明时就写出他的大小.) 于是我们看到了上面的情况,如果要加入元素就移动后面的指针(rear),如果要获取(退出)元素就把前面的…
循环队列 我们再用队列得时候不知道发没发现这样一个问题. 这是一个只有三个位置得队列,在进行三次加入(addqueue)操作和三次取出(get)操作之后再进行加入操作时候的样子.明显可以看到,队列已经无法使用了.队列是靠rear和front指针来进行操作的.这两个指针只能向后运动,并不能向前移动,所以他们走过的数组元素就再也不能利用了. 也就是说队列只能用一次.加入,退出,然后就结束了. 当然了,着对于很多问题是不被原谅的. 所以这就要引用一个全新的概念,环形队列. 看一下这个吧,一看就知道这个…
队列是一种:先进先出,后进后出的数据结构 单项队列: 从前面删除元素,从后面插入元素,跟现实中排队是一样的道理 这里我们用指针移动位置的方法.因为数组删除元素,如果我们要跟现实中排队效果一样,就需要移动数组,很浪费时间和空间. 所以: >添加元素时,当尾部到达数组末尾的时候,我们就把他指向头部 >删除元素时,当头部到达数组末尾的时候,我们就把头部重置,即指向0 package com.ghostwu; class Queue { private Object[] queueArr; priva…
前面我们讲解了数组,数组更多的是用来进行数据的存储,纯粹用来存储数据的数据结构,我们期望的是插入.删除和查找性能都比较好.对于无序数组,插入快,但是删除和查找都很慢,为了解决这些问题,后面我们会讲解比如二叉树.哈希表的数据结构. 而本篇博客讲解的数据结构和算法更多是用作程序员的工具,它们作为构思算法的辅助工具,而不是完全的数据存储工具.这些数据结构的生命周期比数据库类型的结构要短得多,在程序执行期间它们才被创建,通常用它们去执行某项特殊的业务,执行完成之后,它们就被销毁.这里的它们就是——栈和队…
算法 - 第二章 数据结构 题目一 用数组实现大小固定的队列和栈(一面题) 数组实现大小固定栈 /*** * size是对头索引(initSize是固定大小) 也是当前栈大小 * size=下个进队index * size-1=下个出队index * size==initSize时队满 判满 * size==0时队空 判空 ***/ public static class ArrayStack { private Integer[] arr; private Integer size; / pu…
写在前面:在家玩了好久,实在是不知道干嘛了,突然想找些事做,现在是时候做些什么了.这些东西不见得多高深,也可能很简单,但很基础,也无法忽视.同时,也是自己学习走过的一条路. 这是开头,就写写C的队列和栈的一些算法吧. 首先是栈的一些基础功能的实现,先贴代码: #include<stdlib.h> #include<stdio.h> typedef int SElemType; //声明栈元素类型为int typedef int Status; //函数返回值的类型为int #def…
                                           两个栈实现队列+两个队列实现栈----java 一.两个栈实现一个队列 思路:所有元素进stack1,然后所有出stack1并进入stack2.实现队列的先进先出即:若stack2非空,我们须要的恰好再栈顶,出栈;若要给队列加入元素,即先进sack1,要出队时,若stack2不为空就出栈,为空时就把stack1所有进栈到stack2 package com.sheepmu; import java.util.S…
原文地址: 图解堆算法.链表.栈与队列(多图预警) 堆(heap),是一类特殊的数据结构的统称.它通常被看作一棵树的数组对象.在队列中,调度程序反复提取队列中的第一个作业并运行,因为实际情况中某些时间较短的任务却可能需要等待很长时间才能开始执行,或者某些不短小.但很重要的作业,同样应当拥有优先权.而堆就是为了解决此类问题而设计的数据结构.………
一.栈的实现: 1.Stack实现 接口实现: class Stack<E> extends Vector<E> {......} 常用的api函数如下: boolean isEmpty() // 判断当前栈是否为空 synchronized E peek() //获得当前栈顶元素 synchronized E pop() //获得当前栈顶元素并删除 E push(E object) //将元素加入栈顶 synchronized int search(Object o) //查找元…
算法提高 队列操作 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 队列操作题.根据输入的操作命令,操作队列(1)入队.(2)出队并输出.(3)计算队中元素个数并输出. 输入格式 第一行一个数字N. 下面N行,每行第一个数字为操作命令(1)入队.(2)出队并输出.(3)计算队中元素个数并输出. 输出格式 若干行每行显示一个2或3命令的输出结果.注意:2.出队命令可能会出现空队出队(下溢),请输出"no",并退出. 样例输入 7 1 19 1 56 2 3 2 3 2…
1,两个栈实现队列 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路:栈的特点时先进后出,队列的特点是先进先出. 若此时有两个队列stack1,stack2,我们用stack1来存储入队的元素,而用stcak2来辅助进行pop()操作. public void push(int node) { stack1.push(node); } 对于pop操作,我需要先进入的元素先出来,若stcak1中按顺序存放着ABC,将其依次pop出来,放入stca…
使用队列实现栈的下列操作: push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空 注意: 你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的. 你所使用的语言也许不支持队列. 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可. 你可以假设所有操作都是有效的(例…
1. 栈和队列的基本性质 栈是先进后出;(像是子弹夹,后进先打出) 队列是先进先出;(像是平时排队买冰淇淋,按顺序轮流) 栈和队列在实现的结构上可以有数组和链表两种形式; (1)数组结构实现容易; (2)用链表结构较为复杂,因为牵扯很多的指针操作; 1.1  栈结构的基本操作 (1)pop操作;(弹出) (2)top或peek操作; (3)push操作;(压栈) (4)size操作; 1.2  队列的基本操作 (1)队列的基本操作与栈操作不同的是,push操作作为在队头加入元素;而pop操作是从…
一.队列实现栈 public class queue2stack { public static void main(String[] args) { QS qs = new QS(); qs.push("1"); qs.push("2"); qs.push("3"); System.out.println(qs.pop()); System.out.println(qs.pop()); System.out.println(qs.peek())…
题目:用两个队列实现栈. 分析:通过一系列的栈的压入和弹出操作来分析用队列模拟一个栈的过程,如图所示,我们先往栈内压入一个元素a.由于两个队列现在都是空,我们可以选择把a插入两个队列中的任一个.我们不妨把a插入queue1.接下来继续往栈内压入b,c两个元素.我们把它们都插入queue1.这个时候 queue1包含3个元素a,b,c其中a位于队列的头部,c位于队列的尾部. 现在我们考虑从栈内弹出一个元素.根据栈的后进先出的原则,最后被压入栈的c应该最先被弹出.由于c位于queue1的尾部,而我们…
232. 用栈实现队列 使用栈实现队列的下列操作: push(x) – 将一个元素放入队列的尾部. pop() – 从队列首部移除元素. peek() – 返回队列首部的元素. empty() – 返回队列是否为空. 示例: MyQueue queue = new MyQueue(); queue.push(1); queue.push(2); queue.peek(); // 返回 1 queue.pop(); // 返回 1 queue.empty(); // 返回 false 说明: 你只…
225. 用队列实现栈 使用队列实现栈的下列操作: push(x) – 元素 x 入栈 pop() – 移除栈顶元素 top() – 获取栈顶元素 empty() – 返回栈是否为空 注意: 你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的. 你所使用的语言也许不支持队列. 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可. 你可以假设所有操…
1. 用栈实现队列 232. Implement Queue using Stacks (Easy) Leetcode / 力扣 class MyQueue { Stack<Integer> stack1=new Stack<>(); Stack<Integer> stack2=new Stack<>(); /** Initialize your data structure here. */ public MyQueue() { } /** Push el…
数据结构必要知识 线性结构 线性结构是最常用的数据结构,数据元素之间存在一对一的线性关系. 线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构.顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的. 链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻的地址信息. 线性表结构常见的有:数组,队列,链表,栈 非线性结构 非线性结构包括:二维数组,多维数组,广义表,树结构,图结构(这就不是一对一了) 稀疏数组 基本介绍 定义: 当一个数组中大部分的元素为…
一.类的继承顺序 只要继承object类就是新式类 不继承object类的都是经典类 在python3 中所有的类都继承object类,都是新式类 在python2 中不继承object的类都是经典类 继承object类的就是新式类 经典类:在py3中不存在,在py2中不主动继承object类 在py2 中 class A:pass --> 经典类 class B(object):pass --> 新式类 在py3 中 class A:pass --> 新式类 class B(objec…
打印列表的疑问 class Node: def __str__(self): return "haha" print([Node(),Node()]) print(Node()) 输出为 [<__main__.Node object at 0x000000000311A208>, <__main__.Node object at 0x000000000311A358>] haha 打印列表调用的不是每个元素str吗?看来不是,那调用的是什么. 一个简单的实例 在…
队列和栈是很常见的应用,大部分算法中都能见到他们的影子. 而单纯的队列和栈经常不能满足需求,所以需要一些很神奇的队列和栈的扩展. 其中最出名的应该是优先队列吧我觉得,然后还有两种比较小众的扩展就是单调队列和单调栈. 先来看一个问题,给一个长度为N的数列,a1,a2...aN,然后给一个k<=N,求输出b1,b2...bN这N个数,其中 bi=max( aj | j<=i && j>i-k && j>0 ). 比较朴素的想法是用一个Nk复杂度的循环来求…
从深入浅出数据结构(4)到(6),我们分别讨论了什么是表.什么是链表.为什么用链表以及如何用数组模拟链表(游标数组),而现在,我们要进入到对线性表(特意加了"线性"二字是因为存在多重表,其不是线性的,而我们现在所说的表都是"一维"."线性"的.另外就是某些数据结构书籍中特别注意"线性"二字,为了尽量避免与某些知名书籍的冲突,我们加上"线性"二字)的最终讨论(但并不是对表的最后一篇博客哦~),就是两种最有名的…
转载:大关的博客 Java多线程 阻塞队列和并发集合 本章主要探讨在多线程程序中与集合相关的内容.在多线程程序中,如果使用普通集合往往会造成数据错误,甚至造成程序崩溃.Java为多线程专门提供了特有的线程安全的集合类,通过下面的学习,您需要掌握这些集合的特点是什么,底层实现如何.在何时使用等问题. 3.1 BlockingQueue接口 java阻塞队列应用于生产者消费者模式.消息传递.并行任务执行和相关并发设计的大多数常见使用上下文. BlockingQueue在Queue接口基础上提供了额外…
Java 算法(一)贪心算法 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 一.贪心算法 什么是贪心算法?是指在对问题进行求解时,总是做出当前看来是最好的选择.也就是说,不从整体最优上加以考虑,所得出的结果仅仅是某种意义上的局部最优解. 因此贪心算法不会对所有问题都能得到整体最优解,但对于很多问题能产生整体最优解或整体最优解的近似解. 贪心算法的构成部分: 候选对象集合 :候选添加进解的对象的结合· 解对象集合 :初始时…
目录 描述 解法一:双队列,入快出慢 思路 入栈(push) 出栈(pop) 查看栈顶元素(peek) 是否为空(empty) Java 实现 Python 实现 解法二:双队列,入慢出快 思路 入栈(push) 出栈(pop) 查看栈顶元素(peek) 是否为空(empty) Java 实现 Python 实现 解法三:单队列 思路 入栈(push) 出栈(pop) 查看栈顶元素(peek) 是否为空(empty) Java 实现 Python 实现 更多 LeetCode 题解笔记可以访问我…
Java性能分析之线程栈详解 Java性能分析迈不过去的一个关键点是线程栈,新的性能班级也讲到了JVM这一块,所以本篇文章对线程栈进行基础知识普及以及如何对线程栈进行性能分析. 基本概念 线程堆栈也称线程调用堆栈,是虚拟机中线程(包括锁)状态的一个瞬间状态的快照,即系统在某一个时刻所有线程的运行状态,包括每一个线程的调用堆栈,锁的持有情况.虽然不同的虚拟机打印出来的格式有些不同,但是线程堆栈的信息都包含: 1.线程名字,id,线程的数量等. 2.线程的运行状态,锁的状态(锁被哪个线程持有,哪个线…
对于阻塞栈,与阻塞队列相似.不同点在于栈是“后入先出”的结构,每次操作的是栈顶,而队列是“先进先出”的结构,每次操作的是队列头. 这里要特别说明一点的是,阻塞栈是Java6的新特征.. Java为阻塞栈定义了接口:java.util.concurrent.BlockingDeque,其实现类也比较多,具体可以查看JavaAPI文档. 下面看一个简单例子: package cn.thread; import java.util.concurrent.BlockingDeque; import ja…
http://www.cnblogs.com/whywhy/p/5066306.html 队列和栈是很常见的应用,大部分算法中都能见到他们的影子. 而单纯的队列和栈经常不能满足需求,所以需要一些很神奇的队列和栈的扩展. 其中最出名的应该是优先队列吧我觉得,然后还有两种比较小众的扩展就是单调队列和单调栈. 先来看一个问题,给一个长度为N的数列,a1,a2...aN,然后给一个k<=N,求输出b1,b2...bN这N个数,其中 bi=max( aj | j<=i && j>i…
Implement the following operations of a stack using queues. push(x) -- Push element x onto stack.pop() -- Removes the element on top of the stack.top() -- Get the top element.empty() -- Return whether the stack is empty.Notes:You must use only standa…