`

java栈和队列的实现

阅读更多

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实现栈和队列,通过接口实现多态

    java中LinkedList集合类实现栈和队列.doc

    java中LinkedList集合类实现栈和队列.docjava中LinkedList集合类实现栈和队列.docjava中LinkedList集合类实现栈和队列.docjava中LinkedList集合类实现栈和队列.docjava中LinkedList集合类实现栈和队列.doc

    Java栈与队列的实现

    Java上机报告对于栈和队列的实现

    数据结构中栈和队列思想的停车场管理系统

    基于c语言数据结构中栈和队列思想的简单停车场管理系统,以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车...

    分别用栈和队列实现迷宫

    分别用栈和队列实现走迷宫的算法,电子工业出版社,叶核亚版的数据结构(java)课后习题,希望对大家有用。

    数据结构 第3章 栈和队列(课后习题程序实现).rar

    数据结构 第3章 栈和队列(课后习题程序实现).rar 数据结构 第3章 栈和队列(课后习题程序实现).rar 数据结构 第3章 栈和队列(课后习题程序实现).rar 数据结构 第3章 栈和队列(课后习题程序实现).rar

    Java实现栈和队列面试题

    主要介绍了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实验-用泛型栈实现泛型队列

    试用java.util.Stack泛型栈作为父类,用另一个泛型栈对象作为成员变量,模拟实现一个泛型子类Queue,当存储元素的第1个栈的元素超过dump时,再有元素入队列就倒入第2栈。除提供无参构造函数Queue( )外,其它所有队列...

    数据结构--表、栈、队列(java)

    数据结构和算法分析(java)实现中第三章知识点的总结,主要讲的是表。栈、队列的原理和实现,以及应用。一共17页。

    Java-用数组实现栈-队列-线性列表

    Java-用数组实现栈-队列-线性列表(最详细) 有注释 适合java新生 进行数组的练习 3个数据结构的数组实现练习

    基于 Java 实现的队列和堆栈

    基于 Java 实现的队列和堆栈; 上次上传的那两个也是一样的,不过我以前由于要积分来下载别的资源,只好把以前的那两个的下载积分设置为6来增加我的积分。

    用栈实现队列(java代码).docx

    用栈实现队列(java代码).docx

    利用顺序栈逆置循环队列.docx

    设计一个算法,用一个栈s将-一个队列Q逆置: (1)要求采用顺序栈和循环队列来实现。 (2)要求采用链栈和链队列来实现。

    数据结构 Java实验4 栈和队列.doc

    实验报告4 栈和队列 一、 实验目的: (1) 掌握栈的基本操作的实现方法。 (2) 利用栈先进后出的特点,解决一些实际问题。 (3) 掌握链式队列及循环队列的基本操作算法。 (4) 应用队列先进先出的特点,解决...

    数据结构实验报告 栈、队列和矩阵.doc

    熟悉线和队列设计,使用栈或队列解决算法设计问题,理解栈和队列的作用:掌握递归算法设计方法。栈和队列的设计和应用;递归算法设计。需要使用栈或队列的算法通常较复杂,理解对于什么应用问题需要使用栈或队列,...

    Java模拟栈和队列数据结构的基本示例讲解

    主要介绍了Java模拟栈和队列数据结构的基本示例,栈的后进先出和队列的先进先出是数据结构中最基础的知识,本文则又对Java实现栈和队列结构的方法进行了细分,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics