宁波企业网站搭建极速建站/谷歌浏览器下载app
栈和队列
栈stack
- 栈也是一种线性结构
- 相比数组,栈对应的操作数数组的子集
- 只能从一端添加元素,也只能从一端取出元素
- 这一端称为栈顶

- 栈是一种后进先出的数据结构
- Last in Firt out(LIFO)
- 在计算机的世界里,栈拥有者不可思议的作用
栈的应用
- 无处不在的undo操作(撤销)
- 沉迷 学习 不法

- 程序调用的系统栈
- 从A函数调用B函数,B函数在调用C函数
- A2,表示进行到A函数的第二行

当一个子过程可以自动回到上层调用继续执行的原因,因为有系统栈去记录每一个中断的点。子过程的调用实现机理就是如此。对于递归的理解会在后续介绍。
栈的实现
Stack
- void push(E)
- E pop()
- E peek()
- int getSize()
- boolean isEmpty()
从用户的角度看,支持这些操作就好
具体底层实现,用户不关心
实际底层有多种实现方式
采用多态的方式
public Interface Stack<E>{int getSize();boolean isEmpty();void push(E e);E pop();E peek();
}
public class ArrayStack<E> implements Stack<E>{Array<E> array;public ArrayStack(int getCapacity){array = new Array<>(capacity);}public ArrayStack(){array = new Array<>();}@Overrideint getSize(){return array.getSise; }@Overrideboolean isEmpty(){return array.isEmpty();}@Overridepublic int getCapacity(){return array.getCapacity();}@Overridevoid push(E e){arraty.addLasy(e);}@OverrideE pop(){array.removeLast();}@OverrideE peek(){return array.getLast();}@Overridepublic String toString(){StringBuilder res = new StringBuilder();res.append("Stack: ");res.append("[]");for(int i = 0 ; i < arr.getSize();i++){res.append(array.get(i));if(i!=array.getSize()-1)res.append(", ");}res.append("] top");return res.toString();}
}
对于array新加如下方法
public E getLast(){return get(size-1);
}
public E getFirst(){return get(0);
}

栈的另一个应用,括号匹配
这是二十家大公司对于该题的面试形式

栈顶元素反映了在嵌套的层次关系中,最近的需要匹配的元素
Class Solution{public boolean isValid(String s){Stack<Character> stack = new Stack<>();for(int i = 0 ; i <s.length();i++)char c = s.charAt(i);if(c=='('||c=='['||c=='{')stack.push(c);else{if(stack.isEmpty())return false;char topChar = stack.pop();if(c==')'&&topChar!='(')return false;if(c==']'&&topChar!='[')return false;if(c=='}'&&topChar!='{')return false;}return stack.isEmpty();}
}
队列
-
队列也是一种线性结构
-
相比数组,队列对应的操作是数组的子集
-
只能从一端添加元素,从另一端取出元素
-
队列是一种先进先出的数据结构(先到先得)
-
First In First Out(FIFO)

Queue<E>
- void enqueue(E)//入队
- E dequeue()//出队
- E getFront()//获取队首元素
- int getSize()
- boolean isEmpty()//是否为空

public interface Queue<E>{void enqueue(E)//入队E dequeue()//出队E getFront()//获取队首元素int getSize()boolean isEmpty()//是否为空
}
public class ArrayQueue<E> implements Queue<E>{private Array<E> array;public ArrayQueue(int capacity){array = new Array<>(capacity);}public ArrayQueue(){array = new Array<>();}@Overridepublic int getSize(){return array.getSize();}@Overridepublic int isEmpty(){return array.isEmpty();}@Overridepublic int getCapacity(){return array.getCapacity();}@Overridepublic int enqueue(){array.addLast(e);}@Overridepublic int dequeue(){return array.removeFirst();}@Overridepublic E getFront(){return array.getFirst();}@Overridepublic String toString(){StringBuilder res = new StringBuilder();res.append("Queue: ");res.append("front [");for(int i = 0 ; i < arr.getSize();i++){res.append(array.get(i));if(i!=array.getSize()-1)res.append(", ");}res.append("] tail");return res.toString();}
}

循环队列
数组队列的问题
(tail+1)%c==front 队列满
对于循环我们可以查看自己的钟表就能理解了循环的意思。形成一个环,大小由数组容积决定。
public class LoopQueue<E> implements Queue<E>{private E[] data;private int front,tail;private int size;public LoopQueue(int capacity){data =(E[]) new Obejct[capacity+1];front = 0;tail = 0;size = 0;}public LoopQueue(){this(10);}public int getCapacity(){return data.length-1;}@Overridepublic boolean isEmpty(){return front==tail;}@Overridepublic String toString(){StringBuilder res = new StringBuilder();res.append("Queue: size = %d, capacity = %d",size,getCapacity());res.append("front [");for(int i = front ; i ! = tail;(i+1)%data.length){res.append(array.get(i));if((i+1)%data.length!=tail)res.append(", ");}res.append("] tail");return res.toString();}
}
循环队列的实现
@Overridepublic void enqueue(E e){if((tail+1)%data.length==front)resize(getCpacity()*2);data[tail] = e;tail = (tail+1)%data.length;size++;}@Overridepublic E dequeue(){if(isEmpty())throw new IllegalArgumentException("cannot dequeue from an empty queue");E ret = data[front];data[front] = null;front = (front+1)%data.length;size--;if(size == getCapacity()/4&&resize(getCapacity()/2!=0)resize(getCapacity()/2);return ret;}private void resize(int newCapacity){E[] newData =(E[]) new Object[newCapacity+1];for(int i = 0; i < size ;i++){newData[i] = data[(i+front) % data.length];}data = newData;front = 0;tail = size;}@Overridepublic E getFront(){if(isEmpty())throw new IllegalArgumentException("from an empty queue");return data[front];}@Overridepublic String toString(){StringBuilder res = new StringBuilder();res.append("Queue: size = %d, capacity = %d",size,getCapacity());res.append("front [");for(int i = front ; i ! = tail;(i+1)%data.length){res.append(array.get(i));if((i+1)%data.length!=tail)res.append(", ");}res.append("] tail");return res.toString();}
数组队列和循环队列的比较
栈和队列习题集
使用动态数组实现栈和队列,但是现在如果没有这种结果的话。我们需要用栈,应该著怎么实现呢?
使用队列实现栈
使用栈实现队列
相关文章:

栈和队列详细讲解+算法动画
栈和队列 栈stack 栈也是一种线性结构相比数组,栈对应的操作数数组的子集只能从一端添加元素,也只能从一端取出元素这一端称为栈顶 栈是一种后进先出的数据结构Last in Firt out(LIFO)在计算机的世界里,栈拥有者不可思议的作用 栈的应用 …...

【Unity3D小技巧】Unity3D中判断Animation以及Animator动画播放结束,以及动画播放结束之后执行函数
推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 在日常开发中,可能会遇到要判断Animation或者Anima…...

【1】熟悉刷题平台操作
TestBench使用 与quartus中testbench的写法有些许。或者说这是平台特有的特性!! 1 平台使用谨记 (1)必须删除:若设计为组合逻辑,需将自动生成的clk删除 若不删除,会提示运行超时错误。 &#…...

计算机网络:RIP协议以及距离向量算法
RIP协议 RIP是一种分布式的基于适量向量的路由选择协议,最大优点是简单。要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的唯一最佳(最短)距离记录,最多包含15个路由器,距离为16就表示网络不可达&…...

[数据结构与算法(严蔚敏 C语言第二版)]第1章 绪论(课后习题+答案解析)
1. 简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。 数据 数据是客观事物的符号表示,是所有能输人到计算机中并被计算机程序处理的符号的总称。数据是信息的载体,能够被计算机识别、存储和加工 数据元素…...

JS_countup.js 的简单使用,数字滚动效果
countup.js countup.js 是一个轻量级,无依赖的JavaScript类,通过简单的设置就可以达到数字滚动的效果 官网:https://inorganik.github.io/countUp.js/ 源码 var CountUpfunction(target,startVal,endVal,decimals,duration,options){var …...

【C++知识点】STL 容器总结
✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📚专栏地址:C/C知识点 📣专栏定位:整理一下 C 相关的知识点,供大家学习参考~ ❤️如果有收获的话,欢迎点赞👍…...

C++---背包模型---装箱问题(每日一道算法2023.3.9)
注意事项: 本题是"动态规划—01背包"的扩展题,dp和优化思路不多赘述。 题目: 有一个箱子容量为 V,同时有 n 个物品,每个物品有一个体积(正整数)。 要求 n 个物品中,任取若…...

if-else if与switch的练习1:输入两个数,输出两个数的加减乘除的值
1.if-else if的练习 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice…...

【教程】你现在还不知道微软的New Bing?你out了,快点进来看
哈喽啊,大家好,好久不见,我是木易巷! 不禁感叹,AI人工智能时代真的已经来临! 目前,谷歌和微软就各自面向大众的产品发布了重大公告。谷歌推出了一款名为Bard实验性对话式 AI 服务,而…...

https流程
ssl加密协议包含以下4个步骤 1、服务器去第三方机构注册生成证书,第三方机构非对称加密生成公钥私钥,给服务器一个私钥,证书包含了公钥。 2、客户端向服务器索要证书 3、客户端向第三方机构验证证书 4、客户端对称加密生成密钥,在…...

python魔法方法
Python中的魔法方法(也称为特殊方法或双下划线方法)是在类定义中使用的一些特殊的函数,可以使用dir方法查询。它们以双下划线开头和结尾,例如__init__和__str__。这些方法被Python解释器用于执行特定的操作,例如实例化对象、字符串…...

软件测试员如何进行产品测试?
一般来讲,当软件成为一个成功的产品后,产品测试工作就会复杂很多。比如拥有的用户量大,迭代频繁,测试的周期短,重复性强。面对紧张复杂的产品测试工作,软件测试员应怎样完成这一系列的测试工作呢࿱…...

计算机网络基础知识点【1】
文章目录计算机网络第一章 计算机网络参考模型1.计算机网络为什么需要分层?1.1 分层思想1.2 分层好处2.OSI七层模型2.1 OSI七层模型总结2.2 OSI七层工作原理2.3 数据封装与解封装2.4 计算机网络常用协议3.TCP/IP参考模型3.1 什么是TCP/IP协议3.2 TCP/IP协议族的组成…...

c++ 中标准库类型 string 详解
👁🗨👁🗨 前言 标准库类型string 表示可变长的字符序列,使用string 类型必须首先包含string 头文件。string 定义在命名空间std 中。 定义和初始化 string 对象 首先说明如何初始化对象是由类本身决定的࿰…...

Html新增属性之拖拽(drag)
元素在拖放过程中触发的事件 HTML5中,只要将元素的 draggable 属性设置为 true 就可以实现拖放功能,在拖放过程中,触发了多个事件,如下: dragstart:事件主体是被拖放元素,在开始拖放被拖放元素时触发。dra…...

C/C++开发,无可避免的多线程(篇二).thread与其支持库
一、原子类型与原子操作 1.1 原子类型与操作介绍 在前一篇博文中,多线程交互示例代码中,给出了一个原子类型定义: // 原子数据类型 atomic_llong total {0}; 那么什么事原子数据类型呢,和c的基础数据类型有什么不同呢:…...

mysql数据库之表级锁
表级锁,每次操作锁住整张表。锁定粒度大,发生所冲突的概率最高,并发度最低。应用在myisam、innodb、bdb等存储引擎中。 一、表级锁分类。 1、表锁 2、元数据锁(meta data lock,MDL) 3、意向锁 二、表锁…...

Python - Pandas - 数据分析(2)
Pandas数据分析2前言常用的21种统计方法describe():numeric_only:偏度skewness:功能:含义:计算公式:演示:峰度值:用途:数值:计算公式:演示&#x…...

我的十年编程路 2019年篇
随着2018年,三星天津研究院的裁撤,我选择了到广州的三星研究院工作,与最心爱的她开始一起生活。 这一年的开始,我注册了博客园。和2014年类似,在刚注册不久,我写了一篇题为《全新开始,全心出发…...

(蓝桥真题)剪格子(搜索+剪枝)
样例1输入: 3 3 10 1 52 20 30 1 1 2 3 样例1输出: 3 样例2输入: 4 3 1 1 1 1 1 30 80 2 1 1 1 100 样例2输出: 10 分析:这道题目我们直接从(1,1)点开始进行dfs搜索即可,但是需要注意一点的是我们搜…...

Kalman Filter in SLAM (3) ——Extended Kalman Filter (EKF, 扩展卡尔曼滤波)
文章目录1. 线性系统的 Kalman Filter 回顾2. Extended Kalman Filter 之 DR_CAN讲解笔记2.1. 非线性系统2.2. 非线性系统线性化2.2.1. 状态方程f(xk)f(x_k)f(xk)在上一次的最优估计状态x^k−1\hat{x}_{k-1}x^k−1处线性化2.2.2. 观测方程h(xk)h(x_k)h(xk)在这一次的预测…...

关于vertical-align的几问
vertical-align属性可以给我讲解一下吗? 当使用table-cell布局或inline元素时,可以使用CSS的vertical-align属性控制元素的垂直对齐方式。该属性可应用于元素本身以及其父元素(例如,td、th、tr和table)。 以下是vertic…...

【拜占庭将军问题】这一计谋,可以让诸葛丞相兴复汉室
我们都知道,诸葛亮第一次北伐是最可能成功的,魏国没有防备,还策反了陇西,陇西有大量的马匹可以装备蜀国骑兵,可惜街亭一丢,那边就守不住了 当时我不在,只能作诗一首~ 如果穿越过去,…...

【Linux】 -- make/Makefile
目录 Linux项目自动化构建工具 – make/Makefile 背景 依赖关系和依赖方法 多文件编译 项目清理 make原理 Linux项目自动化构建工具 – make/Makefile 背景 一个工程的源文件不计其数 按照其类型、功能、模块分别放在若干个目录当中 Makefile定义了一系列的规则来指定&…...

Forter 对支付服务商应对欺诈的四个建议和Gartner的两个关键结论
Gartner新版2023年度《线上欺诈检测市场指南》发布恰逢其时-企业正面临来自专业黑产和欺诈者与日俱增的压力。而在2023年,许多商户将调整反欺诈策略,对拒付率和转化率进行更严格的监测,以最大限度减少损失并增加营收。以下是Gartn…...

ANR系列(二)——ANR监听方案之IdleHandler
前言 关于IdleHandler,比较多同学错误地认为,这个Handler的作用是主线程空闲状态时才执行它,那么用它做一些耗时操作也没所谓。可是IdleHandler在主线程的MessageQueue中,执行queueIdle()默认当然也是执行在主线程中的࿰…...

数学小课堂:数学和自然科学的关系(数学方法,让自然科学变成科学体系。)
文章目录 引言I 数学方法,让自然科学变成科学体系。1.1 天文学1.2 博物学1.3 化学1.4 医药学1.5 物理学II 自然科学的升华过程III 数学方法的意义引言 19世纪初,英国人把采用实验的方法,系统地构造和组织知识,解释和预测自然的学问称为科学。 科学研究的是自然现象和自然…...

[蓝桥杯 2020 省 A1] 分配口罩
思路比较容易想到,因为口罩全部只有15批,因此直接暴力dfs搜索即可 //dfs #include<bits/stdc.h> using namespace std; int ans 9999; int num[] {9090400, 8499400, 5926800, 8547000, 4958200, 4422600, 5751200, 4175600, 6309600, 5865200, …...

第五章:C语言数据结构与算法之双向带头循环链表
系列文章目录 文章目录系列文章目录前言一、哨兵位的头节点二、双向链表的结点三、接口函数的实现1、创建结点2、初始化3、尾插与尾删4、头插与头删5、打印6、查找7、随机插入与随机删除8、判空、长度与销毁四、顺序表和链表的对比1. 不同点2. 优缺点五、缓存命中1、缓存2、缓存…...