文档章节

两个栈实现队列+两个队列实现栈----java

 张欢19933
发布于 2017/02/27 15:09
字数 499
阅读 41
收藏 1

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

一.两个栈实现一个队列

思路:所有元素进stack1,然后全部出stack1并进入stack2.实现队列的先进先出即:若stack2非空,我们需要的恰好再栈顶,出栈;若要给队列添加元素,即先进sack1,要出队时,若stack2不为空就出栈,为空时就把stack1全部进栈到stack2

import java.util.Stack;
 
/**
* Created by smyhvae on 2015/9/9.
*/
public class Queue {
 
private Stack<Integer> stack1 = new Stack<>();//执行入队操作的栈
 private Stack<Integer> stack2 = new Stack<>();//执行出队操作的栈
 
//方法:给队列增加一个入队的操作
 public void push(int data) {
  stack1.push(data);
 
}
 
//方法:给队列正价一个出队的操作
 public int pop() throws Exception {
 
if (stack2.empty()) {//stack1中的数据放到stack2之前,先要保证stack2里面是空的(要么一开始就是空的,要么是stack2中的数据出完了),不然出队的顺序会乱的,这一点很容易忘
 
while (!stack1.empty()) {
    stack2.push(stack1.pop());//把stack1中的数据出栈,放到stack2中【核心代码】
   }
 
}
 
if (stack2.empty()) { //stack2为空时,有两种可能:1、一开始,两个栈的数据都是空的;2、stack2中的数据出完了
   throw new Exception("队列为空");
  }
 
return stack2.pop();
 }
 
public static void main(String[] args) throws Exception {
  Queue queue = new Queue();
  queue.push(1);
  queue.push(2);
  queue.push(3);
 
System.out.println(queue.pop());
 
queue.push(4);
 
System.out.println(queue.pop());
  System.out.println(queue.pop());
  System.out.println(queue.pop());
 
}
 
}

二.两个队列实现一个栈

import java.util.ArrayDeque;
import java.util.Queue;
 
/**
* Created by smyhvae on 2015/9/9.
*/
public class Stack {
 
Queue<Integer> queue1 = new ArrayDeque<Integer>();
 Queue<Integer> queue2 = new ArrayDeque<Integer>();
 
//方法:入栈操作
 public void push(int data) {
  queue1.add(data);
 }
 
//方法:出栈操作
 public int pop() throws Exception {
  int data;
  if (queue1.size() == 0) {
   throw new Exception("栈为空");
  }
 
while (queue1.size() != 0) {
   if (queue1.size() == 1) {
    data = queue1.poll();
    while (queue2.size() != 0) { //把queue2中的全部数据放到队列一中
     queue1.add(queue2.poll());
     return data;
    }
   }
   queue2.add(queue1.poll());
  }
  throw new Exception("栈为空");//不知道这一行的代码是什么意思
 }
 
public static void main(String[] args) throws Exception {
  Stack stack = new Stack();
 
stack.push(1);
  stack.push(2);
  stack.push(3);
 
System.out.println(stack.pop());
  System.out.println(stack.pop());
  stack.push(4);
 }
}

 

本文转载自:http://www.2cto.com/kf/201408/324163.html

粉丝 48
博文 644
码字总数 369103
作品 0
海淀
私信 提问
加载中

评论(0)

数据结构之栈和队列及其Java实现

栈和队列是数据结构中非常常见和基础的线性表,在某些场合栈和队列使用很多,因此本篇主要介绍栈和队列,并用Java实现基本的栈和队列,同时用栈和队列相互实现。 栈:栈是一种基于“后进先出...

osc_sw6n0c3p
2018/04/20
11
0
剑指offer——栈与队列相关 Queue,Deque,Stack

剑指offer——栈的压入、弹出序列 剑指offer——用两个栈来实现队列 剑指offer——调整数组顺序使奇数位于偶数前面 使用队列时注意: 判断是否为空(获取但不删除) queue.peek() == null 区...

osc_2cpecyp0
2018/03/13
5
0
[算法总结] 3 道题搞定 BAT 面试——堆栈和队列

本文首发于我的个人博客:尾尾部落 0. 基础概念 栈:后进先出(LIFO) 队列:先进先出(FIFO) 1. 栈的 java 实现 2. 队列的 java 实现 3. 用两个栈实现队列 剑指offer:用两个栈实现队列 Le...

繁著
2018/09/04
0
0
[算法总结] 6 道题搞定 BAT 面试——堆栈和队列

本文首发于我的个人博客:尾尾部落 0. 基础概念 栈:后进先出(LIFO) 队列:先进先出(FIFO) 1. 栈的 java 实现 2. 队列的 java 实现 3. 用两个栈实现队列 剑指offer:用两个栈实现队列Lee...

osc_yny7gjj7
2018/09/04
1
0
【从今天开始好好学数据结构02】栈与队列

我们今天主要来谈谈“栈”以及队列这两种数据结构。 回顾一下上一章中【数据结构01】数组中,在数组中只要知道数据的下标,便可通过顺序搜索很快查询到数据,可以根据下标不同自由查找,然而...

osc_joco7w0s
04/16
3
0

没有更多内容

加载失败,请刷新页面

加载更多

centos7.4解压方式安装mysql5.7

删除Mysql yum remove mysql mysql-server mysql-libs mysql-server; find / -name mysql #将找到的相关东西删掉;例如:rm -rf /var/lib/mysql rpm -qa|grep mysql #(查询出来的东东yum rem......

中颀013
46分钟前
21
0
如何在电脑屏幕上录制视频?安利一款屏幕录像软件

如何在电脑屏幕上录制视频?相信很多小伙伴都会有这个需求,毕竟如今网上有很多教学视频或者游戏直播视频等,它们在市场上有产出所以必定会有大量需求,所以,如果伙伴们也想通过对电脑视频进...

斯卡哈
46分钟前
22
0
SQL笔试 I 经典44题及答案解析

01 建表语句 create table Student(sid varchar(10),sname varchar(10),sage datetime,ssex nvarchar(10));insert into Student values('01' , '赵雷' , '1990-01-01' , '男');insert into......

osc_s4e6jr85
47分钟前
14
0
csharp WebUploader 分块上传

HTML部分 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="up6.index" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://......

osc_afifi2qt
48分钟前
13
0
通信原理的新认识-从实践到原理

在读书期间,本人是学习的通信专业,曾反复研读樊昌信老师写的《通信原理》这本书,一直停留在表面且没有新的理解,直到毕业之后从事通信相关的工作,才在实践层面对通信有了新认识。现就将新...

osc_2mvp7jnu
49分钟前
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部