关于队列的几个小算法

2023-11-15

1、用静态数组实现队列的基本操作

    思路 :创建3个变量,start,end,size; size用来查看数组中数据的数量,从而实现添加和删除的长度控制。当添加数据时,如果end=size-1;说明end已经指向最后一位。所以:end = end==size-1 ? 0 : end++;    当删除数据时,若size>0.删除start指向的数据,start = start == arr.length-1?0:start++;

package algorithm;

import java.util.EmptyStackException;
/**
 * 用静态数组实现队列的基本操作
 * 用3个元素记录
 * 实现数组的循环利用
 * @author hasee
 *
 */
public class Queue1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Queue q = new Queue(3);
		q.offer(1);
		System.out.println(q.peek());
	}
	static class Queue {
		int [] arr ;
		int start,end,size;
		public Queue(int i) {
			if(i<0)
				throw new IllegalArgumentException("the length of Quene is smaller than 0");
			arr = new int[i];
			start = 0;
			end = 0;
			size = 0;
		}
		
		
		//入队
		public void offer(int i)  {
			if(size == arr.length) {
				throw new IndexOutOfBoundsException("the queue id full");
			}
			arr[end] = i;
			end = end==arr.length-1?0:end++;	
			size++;
		}
		//出队
		public  int pop() {
			if(size==0) {
				throw new EmptyStackException();
			}
			int temp = start;
			start = start == arr.length-1?0:start++;
			size--;
			return arr[temp];
		}
		//返回第一个值
		public  int peek() {
			if(size==0) {
				throw new EmptyStackException();
			}
			return arr[start];
		}
	}

}

2.用栈实现队列

思路:创建两个栈,一个data  一个help。当需要输入数据的时候,往data栈里添加。输出数据的时候,查看data.size()>0.将data栈中的数据都放到help栈中,输出help栈顶,再将help栈的数据都放到data中。

package algorithm;

import java.util.Stack;

/**
 * 用栈实现队列
 * @author hasee
 *
 */
public class Queue2 {
	
	public static void main(String[] args) {
		Queue q = new Queue();
		q.add(1);
		q.add(2);
		q.add(3);
		q.add(4);
		System.out.println(q.peek());
		System.out.println(q.peek());
	}
	
	static class Queue {
		private Stack<Integer> data = new Stack<Integer>();
		private Stack<Integer> help = new Stack<Integer>();
		
		//加入新元素
		public void add(int i) {
			// TODO Auto-generated method stub
			data.push(i);
		}
		
		//出队列
		public int remove() {
			if(data.size()==0)
				throw new NullPointerException("the queue is null");
			int size1 = data.size();
			for(int i = 0;i < size1;i++) {
				help.push(data.pop());
			}
			int result = help.pop();
			int size2 = help.size();
			for(int j = 0;j < size2;j++)
				data.push(help.pop());
			return result;
		}
		
		//返回队列第一个元素 但不删除
		public int peek() {
			if(data.size()==0)
				throw new NullPointerException("the queue is null");
			while(data.size()>0) {
				help.push(data.pop());
			}
			int result = help.peek();
			while(help.size()>0){
				data.push(help.pop());
			}
			return result;
		}
		
		
	}
}









本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于队列的几个小算法 的相关文章

  • 当路径的点超出视野时,Android Canvas 不会绘制路径

    我在绘制路径时遇到了 Android Canvas 的一些问题 我的情况是 我有一个相对布局工作 如地图视图 不使用 google api 或类似的东西 我必须在该视图上绘制一条路径 canvas drawPath polyPath bor
  • Logback:SizeAndTimeBasedRollingPolicy 不遵守totalSizeCap

    我正在尝试以一种方式管理我的日志记录 一旦达到总累积大小限制或达到最大历史记录限制 我最旧的存档日志文件就会被删除 当使用SizeAndTimeBasedRollingPolicy在 Logback 1 1 7 中 滚动文件追加器将继续创建
  • 您建议使用哪种压缩(GZIP 是最流行的)servlet 过滤器?

    我正在寻找一个用于大容量网络应用程序的 GZIP servlet 过滤器 我不想使用容器特定的选项 要求 能够压缩响应负载 XML Faster 已在大批量应用的生产中得到验证 应适当设置适当内容编码 跨容器移植 可选择解压缩请求 谢谢 我
  • 是否可以从 servlet 内部以编程方式设置请求上下文路径?

    这是一个特殊情况 我陷入了处理 企业 网络应用程序的困境 企业应用程序正在调用request getContext 并将其与另一个字符串进行比较 我发现我可以使用 getServletContext getContextPath 获取 se
  • 如何通过注解用try-catch包装方法?

    如果应该在方法调用中忽略异常 则可以编写以下内容 public void addEntryIfPresent String key Dto dto try Map
  • Java、Spring:使用 Mockito 测试 DAO 的 DataAccessException

    我正在尝试增加测试覆盖率 所以我想知道 您将如何测试 DAO 中抛出的 DataAccessExceptions 例如在一个简单的 findAll 方法中 该方法仅返回数据源中的所有数据 就我而言 我使用 Spring JdbcTempla
  • 用于缓存的 Servlet 过滤器

    我正在创建一个用于缓存的 servlet 过滤器 这个想法是将响应主体缓存到memcached 响应正文由以下方式生成 结果是一个字符串 response getWriter print result 我的问题是 由于响应正文将不加修改地放
  • 寻找局部最小值

    下面的代码正确地找到了数组的局部最大值 但未能找到局部最小值 我已经进行了网络搜索 以找到找到最小值的最佳方法 并且根据这些搜索 我认为我正在使用下面的正确方法 但是 在几天的时间里多次检查每一行之后 下面的代码中有一些我仍然没有看到的错误
  • 在 Clojure 中解压缩 zlib 流

    我有一个二进制文件 其内容由zlib compress在Python上 有没有一种简单的方法可以在Clojure中打开和解压缩它 import zlib import json with open data json zlib wb as
  • Play.application() 的替代方案是什么

    我是 Play 框架的新手 我想读取conf文件夹中的一个文件 所以我用了Play application classloader getResources Data json nextElement getFile 但我知道 play P
  • Karaf / Maven - 无法解决:缺少需求 osgi.wiring.package

    我无法在 Karaf 版本 3 0 1 中启动捆绑包 该包是使用 Maven 构建的并导入gson http mvnrepository com artifact com google code gson gson 2 3 1 我按照要求将
  • 使用Java绘制维恩图

    我正在尝试根据给定的布尔方程绘制维恩图 例如 a AND b AND c我想在 Android 手机上执行此操作 因此我需要找到一种使用 Java 来执行此操作的方法 我找到了一个完美的小部件 它可以完成我在这方面寻找的一切布尔代数计算器
  • 如何让 Emma 或 Cobertura 与 Maven 一起报告其他模块中源代码的覆盖率?

    我有一个带有 Java 代码的多模块 Maven 设置 我的单元测试在其中一个模块中测试多个模块中的代码 当然 这些模块具有相互依赖性 并且在测试执行之前根据需要编译所有相关模块中的代码 那么 如何获得整个代码库覆盖率的报告 注意 我不是问
  • 禁用 Android 菜单组

    我尝试使用以下代码禁用菜单组 但它不起作用 菜单项仍然启用 你能告诉我出了什么问题吗 资源 菜单 menu xml menu menu
  • 如何处理 StaleElementReferenceException

    我正在为鼠标悬停工作 我想通过使用 for 循环单击每个链接来测试所有链接的工作条件 在我的程序中 迭代进行一次 而对于下一次迭代 它不起作用并显示 StaleElementReferenceException 如果需要 请修改代码 pub
  • 检查应用程序是否在 Android Market 上可用

    给定 Android 应用程序 ID 包名称 如何以编程方式检查该应用程序是否在 Android Market 上可用 例如 com rovio angrybirds 可用 而 com random app ibuilt 不可用 我计划从
  • ArrayList.clear() 和 ArrayList.removeAll() 有什么区别?

    假如说arraylist定义为ArrayList
  • 将对象从手机共享到 Android Wear

    我创建了一个应用程序 在此应用程序中 您拥有包含 2 个字符串 姓名和年龄 和一个位图 头像 的对象 所有内容都保存到 sqlite 数据库中 现在我希望可以在我的智能手表上访问这些对象 所以我想实现的是你可以去启动 启动应用程序并向左和向
  • 基于 Spring Boot 的测试中的上下文层次结构

    我的 Spring Boot 应用程序是这样启动的 new SpringApplicationBuilder sources ParentCtxConfig class child ChildFirstCtxConfig class sib
  • 即使调整大小,如何获得屏幕的精确中间位置

    好的 这个问题有两部分 当我做一个JFrame 并在其上画一些东西 即使我将宽度设置为 400 并使其在一个项目击中它时 当然 允许项目宽度 它会反弹回来 但由于某种原因 它总是偏离屏幕约 10 个像素 有没有办法解决这个问题 或者我只需要

随机推荐

  • saltstack部署MySQL主从

    saltstack部署MySQL主从 1 目录结构 2 编写状态文件 2 1 main sls文件内容 2 2 master sls的文件内容 2 3 slave sls文件内容 2 4 grant mysql sls文件内容 2 5 ma
  • 小孩学机器人还是编程好

    小孩学机器人还是编程好 对于很多家长们来说 他们的主要任务就是培养孩子的学习 很多的家长在培养孩子的学习方面可以说是相当的重视的 会给孩子选择一些能够有利于孩子成长的课程 就拿现在很多的家长想要孩子去学习机器人编程的课程来说 有的家长对于小
  • 来自天秤座的梦想_天秤座:单线全自动机器学习

    来自天秤座的梦想 Libra is one of the python package which helps in performing deep learning on a given data set with minimum no
  • git-创建远程分支

    最近公司项目都是迭代 所以需要创建新分支重新开发 1 在当前分支下 一般是master分支 创建test的本地分支 根据自己的需求切换分支进行分支的创建 git checkout b test Switched to a new branc
  • Qt的日常编程过程中遇见的问题和使用

    Qt的日常编程过程中遇见的问题和注意 Qt的日常编程过程中遇见的问题 1 QString和String的转化的格式问题 中文转化过程中会出现问题 2 使用qcustomplot的时候出现错误 LINK2019 无法解析的外部符号 3 Qt报
  • git基础使用

    提交本地仓库 1 git init 初始化仓库 设置用户名和邮箱 进入根目录 cd 查看用户名和密码 cat gitconfig 删除 修改用户名和密码 vim gitconfig 退出 命令行 esc wq q强制退出 git confi
  • 哨兵的作用

    查找中免去越界判断 这种在查找方向的尽头设置 哨兵 免去了在查找过程中每次比较后都要判断查找位置是否越界的小技巧 看似与原先差别不大 但在总数据较多时 效率提高很大 是非常好的编程技巧 代码一 int sequentialSearch in
  • error: (-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor‘

    路径全英文
  • 若依--实现--图片上传

    在学生表当中实现图片 添加 和 修改 只需要4步 其中一步是人家写好的 我们需要现在数据库加一个图片的字段picture 显示页面中只需要这个一步就可以了 field picture title 学生照片 formatter functio
  • 指针 中 数组指针,指针数组,数组传参,指针传参

    1 指针数组 指针数组是一个数组 里面每个元素是指针 初始化如下 2 数组指针 指向数组的指针 形式如下int p 5 因为 比 优先级高 因此表示一个指针必须给 p带上括号 赋初值如下 3 数组指针的应用 include
  • Invalid bound statement (not found): com.lu.tech.eduservice.mapper.EduCourseMapper.queryById

    baseMapper中没有queryById 方法 使用selectById
  • EmlParse:一款超轻量级的批量解析EML格式电子邮件的工具

    工具特点 1 绿色纯天然 无任何依赖库 文件大小不到150K 2 可批量解析EML格式的电子邮件 3 可提取EML文件中的正文和附件到指定目录 4 可生成HTML格式的邮件列表清单 方便用户进行离线阅读 5 可生成JSON格式的邮件列表清单
  • ipv6 inet_pton功能说明

    基于VS2017 include
  • SpringBoot中事务配置

    做个学习笔记 SpringBoot创建的项目由于不存在xml配置文件了 对于用惯Spring的xml配置事务犯了难 百度了下 大多文章都是用 Transactional对每一个方法或类手动添加任务 这样很麻烦 就自己摸索了下 实现了对指定切
  • 2022年美赛C题翻译+思路分享

    MCM C 交易策略 思路在后面 背景 市场交易者频繁买卖波动性资产 目标是最大化其总回报 每次买卖通常都会有佣金 两种这样的资产是黄金和比特币 图 1 黄金每日价格 每金衡盎司美元 资料来源 伦敦金银市场协会 2021 年 9 月 11
  • 灰狼优化算法(GWO)(解决TSP问题,代码完整免费)

    算法背景 灰狼优化算法 GWO 由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种群智能优化算法 灵感来自于灰狼群体捕食行为 优点 较强的收敛性能 结构简单 需要调节的参数少 容易实现 存在能够自适应调整的收敛因子
  • MYSQL的四种连接查询学习笔记

    内连接 inner join 或者 join 外连接 1 左连接 left join 或者 left outer join 2 右连接 right join 或者 right outer join 3 完成外连接 full join 或者
  • QT TCP简单的通信示例

    TCP服务端 第一步 创建监听套接字的QTcpSever QTcpServer m tsTcpServer 第二部步 listen 监听是否有新的连接进来 int iMyport 如果有新的客户端连接的话 会触发信号newConnectio
  • Appium 环境搭建安装 java sdk 和 Android SDK

    java sdk 下载 java sdk 在官网上下载https www oracle com java technologies downloads java8 windows 无脑下一步安装 但要看清楚安装目录 配置全局变量要用 我的是
  • 关于队列的几个小算法

    1 用静态数组实现队列的基本操作 思路 创建3个变量 start end size size用来查看数组中数据的数量 从而实现添加和删除的长度控制 当添加数据时 如果end size 1 说明end已经指向最后一位 所以 end end s