剑指offer面试题7——用两个栈实现队列

package offer7;

import common.Stack;

/**
 * 用两个栈实现一个队列
 * @author chibozhou
 */
public class Queue<T> {
	//队列当前大小
	private int curSize;
	//队列最大容量
	private int maxSize;
	//两个栈
	private Stack<T> stack1;
	private Stack<T> stack2;
	
	
	/**
	 * 初始化队列
	 * @param maxSize 设置最大容量
	 */
	public Queue(int maxSize){
		//健壮性判断
		if(maxSize<=0){
			System.out.println("队列大小不能小于1");
			return;
		}
		
		//初始化栈
		stack1 = new Stack<T>(maxSize);
		stack2 = new Stack<T>(maxSize);
		this.maxSize = maxSize;
	}
	
	
	
	/**
	 * 入队 
	 * @param obj 入队的元素
	 */
	public boolean push(T obj){
		//健壮性判断
		if(obj==null){
			System.out.println("入队元素不能为空!");
			return false;
		}
		
		//队已满
		if(stack1.getCurSize()>=maxSize){
			System.out.println("队以满!");
			return false;
		}
		
		//入队
		stack1.push(obj);
		curSize++;
		return true;
	}
	
	
	
	/**
	 * 出队
	 */
	public T pop(){
		//对为空
		if(curSize==0){
			System.out.println("队为空!");
			return null;
		}
		
		//将stack1中的所有元素转移到stack2中,再从stack2栈顶取元素即可
		while(stack1.getCurSize()>0){
			stack2.push(stack1.pop());
		}
		return stack2.pop();
	}
	
	
	
	/**
	 * 打印队列
	 */
	@Override
	public String toString() {
		System.out.println("Queue---maxSize:"+maxSize+"---curSize:"+curSize+"------");
		//队列为空
		if(curSize==0){
			System.out.println("队列为空");
			return null;
		}
		
		//若数据都在stack1中,则转到stack2中
		if(stack1.getCurSize()>=0){
			while(stack1.getCurSize()>0){
				stack2.push(stack1.pop());
			}
		}
		
		//打印stack2中的元素
		for(int i=0;i<stack2.getCurSize();i++){
			System.out.println(stack2.top());
		}
		System.out.println("Queue--------------------------------------------------");
		return null;
	}


}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2626
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2737
来自专栏转载gongluck的CSDN博客

cocos2dx 打灰机

#include "GamePlane.h" #include "PlaneSprite.h" #include "BulletNode.h" #include...

5676
来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2190
来自专栏芋道源码1024

熔断器 Hystrix 源码解析 —— 断路器 HystrixCircuitBreaker

本文主要基于 Hystrix 1.5.X 版本 1. 概述 2. HystrixCircuitBreaker 3. HystrixCircuitBreaker....

5407
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

4075
来自专栏菩提树下的杨过

Flash/Flex学习笔记(23):运动学原理

先写一个公用的小球类Ball: package{ import flash.display.Sprite; //小球 类 public class B...

25410
来自专栏飞扬的花生

jsencrypt参数前端加密c#解密

      写程序时一般是通过form表单或者ajax方式将参数提交到服务器进行验证,如何防止提交的请求不被抓包后串改,虽然无法说绝对安全却给非法提交提高了难度...

3929
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2675

扫码关注云+社区