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("赵五")); } }
又更简洁的办法欢迎留言指导,谢谢!
相关推荐
栈和队列的基本操作及其应用 1、掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用。...3、掌握栈和队列的基本运算,如:入栈与出栈,入队与出队等运算在顺序存储结构和链式存储结构上的实现。 回文判断
通过栈和队列两种不同的方法来实现迷宫问题,队列方法求出的迷宫路径是最短路径
使用java实现栈和队列,通过接口实现多态
java中LinkedList集合类实现栈和队列.docjava中LinkedList集合类实现栈和队列.docjava中LinkedList集合类实现栈和队列.docjava中LinkedList集合类实现栈和队列.docjava中LinkedList集合类实现栈和队列.doc
Java上机报告对于栈和队列的实现
基于c语言数据结构中栈和队列思想的简单停车场管理系统,以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车...
分别用栈和队列实现走迷宫的算法,电子工业出版社,叶核亚版的数据结构(java)课后习题,希望对大家有用。
数据结构 第3章 栈和队列(课后习题程序实现).rar 数据结构 第3章 栈和队列(课后习题程序实现).rar 数据结构 第3章 栈和队列(课后习题程序实现).rar 数据结构 第3章 栈和队列(课后习题程序实现).rar
主要介绍了Java实现栈和队列的面试题,每个例题代码实现非常详细,每一个方法讲解也很到位,特别适合参加Java面试的朋友阅读。
包含JWArray和JWList,分别包含顺序结构及链式结构的线性表、栈和队列操作,函数使用方便简单,可以作为简单的C语言线性表、栈和队列操作库。
内容和要求 单链表操作 和 栈、队列的... 4)定义一个顺序栈和循环队列,实现将队列中所有元素逆置。 实验数据:1)线性表为 6,2,11,5,2,4,2; 2)x=2; 3) k=5 或 k=10; 4)队列中的数据为 1,2,3,4,5,6
试用java.util.Stack泛型栈作为父类,用另一个泛型栈对象作为成员变量,模拟实现一个泛型子类Queue,当存储元素的第1个栈的元素超过dump时,再有元素入队列就倒入第2栈。除提供无参构造函数Queue( )外,其它所有队列...
数据结构和算法分析(java)实现中第三章知识点的总结,主要讲的是表。栈、队列的原理和实现,以及应用。一共17页。
Java-用数组实现栈-队列-线性列表(最详细) 有注释 适合java新生 进行数组的练习 3个数据结构的数组实现练习
基于 Java 实现的队列和堆栈; 上次上传的那两个也是一样的,不过我以前由于要积分来下载别的资源,只好把以前的那两个的下载积分设置为6来增加我的积分。
用栈实现队列(java代码).docx
设计一个算法,用一个栈s将-一个队列Q逆置: (1)要求采用顺序栈和循环队列来实现。 (2)要求采用链栈和链队列来实现。
实验报告4 栈和队列 一、 实验目的: (1) 掌握栈的基本操作的实现方法。 (2) 利用栈先进后出的特点,解决一些实际问题。 (3) 掌握链式队列及循环队列的基本操作算法。 (4) 应用队列先进先出的特点,解决...
熟悉线和队列设计,使用栈或队列解决算法设计问题,理解栈和队列的作用:掌握递归算法设计方法。栈和队列的设计和应用;递归算法设计。需要使用栈或队列的算法通常较复杂,理解对于什么应用问题需要使用栈或队列,...
主要介绍了Java模拟栈和队列数据结构的基本示例,栈的后进先出和队列的先进先出是数据结构中最基础的知识,本文则又对Java实现栈和队列结构的方法进行了细分,需要的朋友可以参考下