JAVA面试题编程题:

请用JAVA实现两个类,分别实现堆栈(Stack)和队列(Queue)操作

package com.lcx.interview;import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;/*** 29. 请用JAVA实现两个类,分别实现堆栈(Stack)和队列(Queue)操作。 堆栈:* 栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表。 栈为后进先出(Last In First Out)的线性表,简称为 LIFO 表。* 一般用List来当模拟容器,常用方法 是否有数据、弹出pop数据、压入push数据、数据量* * 队列: 是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,* 而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。 进行插入操作的端称为队尾,进行删除操作的端称为队头。 模拟* * @author */
public class Interview_29_StackQueue {public static void main(String[] args) {System.out.println("--------------------堆栈--------------------");MyStack<Integer> stack = new MyStack<Integer>();System.out.println("刚创建堆栈时,stack.isEmpty():" + stack.isEmpty() +",stack.size():" + stack.size());stack.push(1);stack.push(2);stack.push(3);System.out.println("push 3个元素时,stack.size():" + stack.size() + ",stack.toString():" + stack.toString());stack.pop();stack.pop();System.out.println("pop 2个元素时,stack.size():" + stack.size() + ",stack.toString():" + stack.toString());System.out.println("--------------------队列--------------------");MyQueue<Integer> queue = new MyQueue<Integer>(5);System.out.println("刚创建堆栈时,queue.isEmpty():" + queue.isEmpty() +",queue.isFull():"+queue.isFull()+ ",queue.size():" + queue.size());for (int i = 0; i < 3; i++) {queue.add(i);}System.out.println("添加3个元素:");System.out.println("queue.getHead():"+queue.getHead()+",queue.getTail():"+queue.getTail()+",queue.size():"+queue.size());System.out.println(queue);System.out.println("干掉2个元素:");//干掉元素,元素只是不能访问到了,被干掉的元素可以被添加的覆盖queue.remove();queue.remove();System.out.println("queue.getHead():"+queue.getHead()+",queue.getTail():"+queue.getTail()+",queue.size():"+queue.size());System.out.println(queue);for (int i = 3; i < 7; i++) {queue.add(i);}System.out.println("添加4个元素:");//此时尾指又要从开始出添加元素System.out.println("queue.getHead():"+queue.getHead()+",queue.getTail():"+queue.getTail()+",queue.size():"+queue.size());System.out.println(queue);System.out.println("干掉4个元素:");//此时尾指又要从开始出添加元素queue.remove();queue.remove();queue.remove();queue.remove();System.out.println("queue.getHead():"+queue.getHead()+",queue.getTail():"+queue.getTail()+",queue.size():"+queue.size());System.out.println(queue);}}class MyStack<E> {private List<E> list;public MyStack() {list = new ArrayList<E>();}/*** 栈是否为空* * @return*/public boolean isEmpty() {return list.size() == 0;}/*** 栈内容长度* * @return*/public int size() {return list.size();}/*** 添加元素* * @param e*/public void push(E e) {list.add(e);}/*** 弹出元素* * @return*/public E pop() {if (list.size() > 0) {return list.remove(list.size() - 1);}return null;}@Overridepublic String toString() {return Arrays.toString(list.toArray());}
}class MyQueue<E> {private int maxSize;// 队列容量private E queue[];// 队列private int head;// 头指针private int tail;// 尾指针private int nItems;// 元素个数@SuppressWarnings("unchecked")public MyQueue(int maxSize) {this.maxSize = maxSize;this.queue = (E[]) new Object[maxSize];this.head = 0;// 移除元素一般从下标0开始,头指针指向待移除的元素(也就是移除元素的下标)this.tail = -1;// 一般设为-1,当添加元素后,尾指针数值为当前已经添加的元素的下标位置this.nItems = 0;}/*** 队列是否为空* * @return*/public boolean isEmpty() {return nItems == 0;}/*** 队列是否已满* * @return*/public boolean isFull() {return nItems == queue.length;}/*** 添加从队尾开始* * @param e*/public void add(E e) {if (isFull()) {throw new RuntimeException("队列已满");}// 当队尾指针已经到达数组的末尾,但数组却未填满(数组前面有空缺),此时又从起始位置添加元素if (tail == maxSize - 1) {tail = -1;}queue[++tail] = e;nItems++;}/*** 删除从对头开始* * @return*/public E remove() {if (isEmpty()) {throw new RuntimeException("队列已空");}// 当对头指针到达数组末尾,但数组个数却不为空(说明数组前面还有元素),此时又从起始位置删除元素if (head == maxSize) {head = 0;}nItems--;return queue[head++];}/*** 获取对头元素* * @return*/public E getHead() {return queue[head];}/*** 获取队尾元素* * @return*/public E getTail() {return queue[tail];}/*** 队列元素个数* * @return*/public int size() {return nItems;}@Overridepublic String toString() {return Arrays.toString(queue);}}

结果截图:

Java实现 栈 和 队列相关推荐

  1. Java中栈和队列的用法 Stack And Queue

    Java中栈和队列的用法 栈的实现 使用Java的集合类Stack boolean isEmpty();//判断当前栈是否为空,等价于empty(); synchronized E peek();// ...

  2. Java 用栈实现队列

    栈是先入后出,队列是先入先出.根据这个思想,可以用一个栈作为入队,另一个栈作为出队.只要把第一个栈的栈顶的元素压入第二个栈就好了,出队的时候输出第二个栈的栈顶,如果第二个栈的空了就需要不断操作从第一个 ...

  3. 【LeetCode笔记】232. 用栈实现队列(Java、栈、队列)

    题目描述 经典题了,貌似现在面试也有点喜欢问,今天补补题! 要实现均摊时间复杂度O(1)噢 思路 & 代码 用两个栈来实现:输出栈 & 输入栈 输出栈 out:负责 pop.peek ...

  4. java 头尾 队列_源码|jdk源码之栈、队列及ArrayDeque分析

    栈.队列.双端队列都是非常经典的数据结构.和链表.数组不同,这三种数据结构的抽象层次更高.它只描述了数据结构有哪些行为,而并不关心数据结构内部用何种思路.方式去组织. 本篇博文重点关注这三种数据结构在 ...

  5. java栈编程题_Java实现栈和队列面试题

    面试的时候,栈和队列经常会成对出现来考察.本文包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min()的栈,要 ...

  6. Java数据结构与算法(第四章栈和队列)

    2019独角兽企业重金招聘Python工程师标准>>> 本章涉及的三种数据存储类型:栈.队列和优先级队列. 不同类型的结构 程序员的工具 数组是已经介绍过的数据存储结构,和其他结构( ...

  7. 【Java实现】栈和队列就是这么简单

    一.前言 上一篇已经讲过了链表[Java实现单向链表]了,它跟数组都是线性结构的基础,本文主要讲解线性结构的应用:栈和队列 如果写错的地方希望大家能够多多体谅并指正哦,如果有更好的理解的方式也希望能够 ...

  8. 《LeetCode力扣练习》剑指 Offer 09. 用两个栈实现队列 Java

    <LeetCode力扣练习>剑指 Offer 09. 用两个栈实现队列 Java 一.资源 题目: 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 de ...

  9. char栈java,Java数据结构与算法-栈和队列(示例代码)

    (摘录加总结)------ 栈和队列不属于基础的数据结构,它们都属于线性表. 一.栈 对于栈存储操作元素只能在栈结构的一端进行元素的插入和删除,是一种性质上的线性表结构.按照"先进后出&qu ...

最新文章

  1. PAT(甲级)2019年春季考试 7-2 Anniversary
  2. SpringCloud 之 Zuul 网关搭建及配置
  3. 使用属性升级MyBank
  4. 人生苦短:Python里的17个“超赞操作
  5. java jmi的基本思想_jmi: JMI 是 JNI 的 C++11/14封装,目的是为了简化JNI使用
  6. 经常在比特币中看到的merkle树是什么?
  7. java 捕获特定异常_java – 使用特定消息捕获异常
  8. php面向对象教学笔记,php学习笔记之面向对象编程
  9. Java并发编程实战_不愧是领军人物!这种等级的“Java并发编程宝典”谁能撰写?...
  10. 电商促销海报PSD分层模板|创意合成,这样的设计越来越吃香!
  11. 所有的生意都是在做两件事
  12. jq校验输入框值变化时_用jq把span的值实时改变input的val值
  13. 最小巧最简单最安全的KMS模拟器vlmcsd,最新支持Win10 server2016和Office2016!
  14. 如何root安卓手机_2019年安卓手机一键root教程,附科普安卓为何root困难?
  15. 阿里云服务器如何选择操作系统?操作系统选择方法
  16. 【nodejs】数据统计平台碰到的坑
  17. Mysql设置别名(表名和列名)
  18. 【Ubuntu】虚拟摄像头,并应用在Teams上
  19. Vulkan【1】介绍
  20. 计算机电源功率计算器,装机不用愁 航嘉功率计算器教你选电源

热门文章

  1. 合成未来宝宝照片_[萌主争霸]2020年台历宝宝投票评选开始啦!快来给你喜欢的萌宝投票吧~...
  2. 蓝桥杯青少创意编程python组
  3. 1.5编程基础之循环控制 26 统计满足条件的4位数个数 python
  4. 利用moviepy库制作好用的MP4、mov、mav、avi等视频类型转换gif图片的工具
  5. win10偶然无法使用任务栏的问题解决办法
  6. STM32H743+Keil-将变量定义到指定内存
  7. 操作系统课设之基于信号量机制的并发程序设计
  8. Redis工作笔记-Set类型
  9. C++设计模式-工厂模式
  10. C++ opengl 点光源