java栈实际上就像一个盒子模型.先放进去的要向拿出了必须先把后放进去的拿出来.先进后出.
实现比较简单.直接贴代码,没有什么好说的.
//底层实现是一个数组 private long[] arr; private int top; /** * 默认的构造方法 */ public MyStack() { arr = new long[10]; top = -1; } /** * 带参数构造方法,参数为数组初始化大小 */ public MyStack(int maxsize) { arr = new long[maxsize]; top = -1; } /** * 添加数据 */ public void push(int value) { arr[++top] = value; } /** * 移除数据 */ public long pop() { return arr[top--]; } /** * 查看数据 */ public long peek() { return arr[top]; } /** * 判断是否为空 */ public boolean isEmpty() { return top == -1; } /** * 判断是否满了 */ public boolean isFull() { return top == arr.length - 1; }
对于队列呢?由于队列的实现特殊性,在添加最后一位元素后会出现假的溢出(实际上这个数组前面可能有空位),这里实现一个循环的队列.节约空间.
对于所有的数据结构都一样,必须有临界值的判断.
想了很久,要判断循环队列的空值或者是满了.直接判断队列的首尾坐标很难判断.
于是想到一个很简单又很容易理解的办法.创建一个变量来保存初始化的最大个数.
package org.masque.queue; /** * QueueArray.java */ /** * 数组实现的循环队列 * @author masque.java@gmail.com */ public class QueueArray { Object[] a; int front; int rear; private int size = 0; private int maxSize; public static final int DEFAULT_MAX_SIZE = 1000; public QueueArray(){ this(DEFAULT_MAX_SIZE); } public QueueArray(int size){ a = new Object[size]; front = 0; rear =0; maxSize = size; } /** * 将一个对象追加到队列尾部 * @param obj 对象 * @return 队列满时返回false,否则返回true */ public boolean insert(Object obj){ if(isFull()){ throw new RuntimeException("insert ["+obj+"] fail,the queue is full!"); } a[rear]=obj; rear = (rear+1)%(a.length);//若坐标到达最大就重置为0 size++; return true; } /** * 队列头部的第一个对象出队 * @return 出队的对象,队列空时返回null */ public Object remove(){ if(isEmpty()){ throw new RuntimeException("remove fail,the queue is empty!"); } size--; Object obj = a[front]; front = (front+1)%(a.length);//若坐标到达最大就重置为0 return obj; } public boolean isEmpty(){ return size == 0; } public boolean isFull(){ return maxSize == size; } public static void main(String[] args) { QueueArray q = new QueueArray(4); /*System.out.println(q.isEmpty());*/ System.out.println("----------------------------------"); System.out.println(q.insert("张三")); System.out.println(q.insert("李斯")); System.out.println(q.insert("赵五")); System.out.println(q.insert("张三")); System.out.println(q.insert("赵五2")); /*System.out.println(q.isFull());*/ System.out.println("----------------------------------"); for(int i=0;i<5;i++){ System.out.println(q.remove()); } System.out.println(q.insert("张三")); System.out.println(q.insert("李斯")); System.out.println(q.insert("赵五")); } }
又更简洁的办法欢迎留言指导,谢谢!
相关推荐
在提供的"栈和队列"压缩包文件中,可能包含了多个Java源代码文件,每个文件都是一个具体的栈或队列应用实例,例如实现括号匹配检查、迷宫路径查找等经典问题。通过分析和运行这些代码,你可以更直观地了解栈和队列在...
在计算机科学中,栈和队列是两种基本的数据结构,它们在编程中有着广泛的应用。栈被称为“后进先出”(LIFO, Last In First Out)数据结构,而队列则是“先进先出”(FIFO, First In First Out)数据结构。这两种...
"利用栈和队列实现迷宫" 通过栈和队列两种不同的方法来实现迷宫问题。队列方法求出的迷宫路径是最短路径。迷宫问题是指在一个迷宫中找到从起点到终点的路径。这里我们使用栈和队列两种数据结构来解决这个问题。 栈...
### 栈和队列的基本操作实现及其应用实验报告 #### 实验目的 1. **熟练掌握栈和队列的基本操作**:在数组和链表两种存储结构上实现栈和队列的基本操作。 2. **应用栈和队列解决实际问题**:通过具体的编程练习,...
栈和队列的基本操作及其应用 1、掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用。...3、掌握栈和队列的基本运算,如:入栈与出栈,入队与出队等运算在顺序存储结构和链式存储结构上的实现。 回文判断
在实现这个系统时,我们可以选择使用编程语言如Python、Java或C++,利用这些语言提供的数据结构库(如Python的`collections.deque`作为双端队列,用于实现栈和队列)。同时,为了提高效率和用户体验,可以考虑采用多...
使用java实现栈和队列,通过接口实现多态
Java栈是一种基于后进先出(LIFO)原则的数据结构,它在计算机科学和编程中具有广泛的应用。本文将深入探讨Java中栈的实现以及其在实际应用中的使用。 首先,我们来理解栈的基本概念。栈是一种特殊类型的线性数据...
Java上机报告对于栈和队列的实现
本资源提供了关于栈和队列的源代码实现,这对于理解这两种数据结构的工作原理以及如何在实际编程中应用它们非常有帮助。 首先,我们来深入理解栈和队列的概念: **栈(Stack)**: 栈是一种后进先出(LIFO,Last ...
基于c语言数据结构中栈和队列思想的简单停车场管理系统,以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车...
在编程中,许多语言提供了内置的栈和队列数据结构,如Python的`collections.deque`可以作为双端队列,支持栈和队列操作,Java的`java.util.Stack`和`java.util.LinkedList`分别实现了栈和队列。此外,还可以自定义...
1. 实验目的:明确学习栈和队列的目的,比如理解其工作原理,掌握如何实现和应用这些数据结构。 2. 知识回顾:解释栈和队列的基本概念,包括它们的定义、特性以及在实际问题中的应用。 3. 实验设计:描述所使用的...
总之,栈和队列是数据结构的基础,熟练掌握它们的实现和应用是成为一名优秀程序员的必要条件。通过分析`stacka`和`Queue`这两个文件中的代码,我们可以更好地理解这两种数据结构的工作原理,并能灵活运用到实际问题...
在数据结构课程的实验4中,学生可能会学习如何使用编程语言(如C++、Java或Python)来实现栈和队列的基本操作,并通过实际的编程练习来加深理解。可能的实验任务包括: 1. 设计和实现栈和队列的类结构,包括构造...
在IT领域,数据结构是解决问题的关键工具之一,而栈和队列是两种基本的数据结构。本主题探讨如何利用栈和队列解决“走迷宫”的问题。在这个问题中,我们通常将迷宫视为一个二维网格,其中每个节点代表一个位置,路径...
以下是一个简单的队列实现: ```java public class MyQueue { private LinkedList<Object> ll = new LinkedList(); public void put(Object o) { ll.addLast(o); } public Object get() { return ll....
数据结构 第3章 栈和队列(课后习题程序实现).rar 数据结构 第3章 栈和队列(课后习题程序实现).rar 数据结构 第3章 栈和队列(课后习题程序实现).rar 数据结构 第3章 栈和队列(课后习题程序实现).rar
3.3 Java中的队列实现 Java提供多种实现队列的方式,如`java.util.LinkedList`可以用来创建双端队列,`java.util.Queue`接口提供了队列的基本操作,而`java.util.concurrent ArrayBlockingQueue`等并发队列类适用...
4. **两个队列实现一个栈**: 使用两个队列,入栈操作将元素加入第一个队列,出栈时将第二个队列清空,将第一个队列的所有元素转移到第二个队列,此时第一个队列的最后一个元素就是栈顶元素,将其出队。 5. **设计...