写点什么

栈实现队列(队列实现栈),java 编程规范 pdf 百度云

用户头像
极客good
关注
发布于: 刚刚

/** Get the top element.


  • 查看栈顶元素但是不删除

  • 方法:

  • 1.如果栈为空,也就是两个队列都为空,那么就抛出空指针异常

  • 2.如果不为空,那么需要将不为空的队列所有的元素出到为空的队列里面,但是每一次出队列的

  • 数字都需要被临时记录下来,也就是定义一个临时的变量,把每一次出出来的值放在里面,知道出出来的数字时最后一个,

  • 然后返回出来该临时变量就是我们所需要查看的值

  • @return


*/


public int top() {


if (empty()) {


throw new RuntimeException("空指针异常");


}


int e = 0;


if (!queue1.isEmpty()) {


for (int i = 0; i < this.UsedSize; i++) {


e = queue1.poll();


queue2.offer(e);


}


} else {


for (int i = 0; i < this.UsedSize; i++) {


e = queue2.poll();


queue1.offer(e);


}


}


return e;


}


/** Returns whether the stack is empty. */


public boolean empty() {


return this.UsedSize == 0;


}


}


<2>栈实现队列


和队列实现栈有着相同的思路,也需要申请两个栈来存放数据


入队:如果两个栈都是空的,第一次,那么我们规定入到 S1,每次都放到 S1


出队:从 S2 当中出,如果 S2 是空的,那么把 S1 当中的元素全部导入 S2 当中


如果 S2 不是空的,那么直接将 S2 的栈顶元素进行 pop();


代码实现


import


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


java.util.Stack;


/**


  • 栈实现队列

  • 方法:

  • 1.当然也是需要两个栈

  • 2.入队,如果两个栈都是空的,就把数字放在 S1,每次都放在 S1

  • 2.出都从 S2 出

  • 2.1.如果 S2 是空的,那么就把 S1 当中的元素全部导入到 S2 当中

  • 2.2.如果 S2 不是空的,直接将 S2 的栈顶元素进行 pop()操作


*/


class MyStackQueue{


private Stack<Integer> stack1;


private Stack<Integer> stack2;


private int UsedSize;


public MyStackQueue(){


this.stack1 = new Stack<>();


this.stack2 = new Stack<>();


this.UsedSize = 0;


}


/** Push element x to the back of queue.


  • 入队,如果两个栈都是空的,就把数字放在 S1,每次都放在 S1


*/


public void push(int x) {


stack1.push(x);


this.UsedSize++;


}


/** Removes the element from in front of queue and returns that element.


  • 1 出都从 S2 出

  • 1.1.如果 S2 是空的,那么就把 S1 当中的元素全部导入到 S2 当中

  • 1.2.如果 S2 不是空的,直接将 S2 的栈顶元素进行 pop()操作


*/


public int pop() {


int e = 0;


if(stack2.empty()) {


while (!stack1.empty()){


stack2.push(stack1.pop());


}


}


if(!stack2.empty()){


e = stack2.pop();


}else {


System.out.println("队列为空");


}


return e;


}


/** Get the front element.


  • 方法:

  • 1.如果 S2 为空,s1 不为空,那么就将栈 S1 的数据利用栈的性值全部放在 S2,然后在返回 S2 的栈顶元素

  • 2.如果 S2 不为空,那么就直接返回 S2 的栈顶元素


*/


public int peek() {


if(stack2.empty()){


while (!stack1.isEmpty()){


stack2.push(stack1.pop());


}


}


int e = 0;


if(!stack2.empty()){


e = stack2.peek();


}else {


System.out.println("队列为空");


}


return e;


}


/** Returns whether the queue is empty. */

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
栈实现队列(队列实现栈),java编程规范pdf百度云