`
阿尔萨斯
  • 浏览: 4171271 次
社区版块
存档分类
最新评论

用数组模拟队列

 
阅读更多
package datastruct;

import java.util.Arrays;

/**
 * 用数组模拟队列  先进先出
 * @author stone
 * 2014-07-29 08:08:18
 */
public class SimulateQueue<E> {
	
	public static void main(String[] args) {
		SimulateQueue queue = new SimulateQueue(3);
//		SimulateQueue queue = new SimulateQueue();
		queue.insert("aaa");
		queue.insert("bbb");
		queue.insert("ccc");
		queue.insert("ddd");
		System.out.println("size:" + queue.size());
		System.out.println("peek:" + queue.peek());
		System.out.println("取出元素:" + queue.remove());
		System.out.println("取出元素:" + queue.remove());
		System.out.println("取出元素:" + queue.remove());
		System.out.println("取出元素:" + queue.remove());
		System.out.println("size:" + queue.size());
	}
	
	private int mSize = 3;			//大小
	private Object[] mArray;		//数组
	private int mFront;				//用于队头 取出
	private int mRear;				//用于队后 插入
	private int mCurrSize;				//当前有几个元素
	
	public SimulateQueue() {
		mArray = new Object[mSize];
		mFront = 0;
		mRear = -1;
		mCurrSize = 0;
	}
	public SimulateQueue(int size) {
		this.mSize = size;
		mArray = new Object[mSize];
		mFront = 0;
		mRear = -1;
		mCurrSize = 0;
	}
	/**
	 * 插入元素
	 * @param e
	 */
	public void insert(E e) {
		if (!isFull()) {
			if (mRear == mSize - 1) {
				mRear = -1;
			}
			mArray[++mRear] = e;
			mCurrSize++;
			System.out.println("插入元素:" + e + ",当前队头元素" + mArray[mFront]);
		} else {
			System.out.println("----不能插入元素了,队列已满----");
		}
	
	}
	/**
	 * 移出元素  先进先出
	 * @return
	 */
	public E remove() {
		Object temp = null;
		if (!isEmpty()) {
			temp = mArray[mFront++];
			mArray[mFront - 1] = null;//将取出来的位置上置空
			System.out.println("取出队头元素后的数组:" + Arrays.toString(mArray));
			if (mFront == mSize) {//表示取到最后一个元素
				mFront = 0;  //从头开始
			}
			mCurrSize--;
		}
		
		return (E) temp;
	}
	/**
	 * 查看前面的元素
	 * @return
	 */
	public E peek() {
		return (E) mArray[mFront];
	}
	/**
	 * 是否为空
	 * @return
	 */
	public boolean isEmpty() {
		return mCurrSize == 0;
	}
	/**
	 * 是否满
	 * @return
	 */
	public boolean isFull() {
		return mCurrSize == mSize;
	}
	/**
	 * size
	 * @return
	 */
	public int size() {
		return mCurrSize;
	}
	
}

输出结果

插入元素:aaa,当前队头元素aaa

插入元素:bbb,当前队头元素aaa

插入元素:ccc,当前队头元素aaa

----不能插入元素了,队列已满----

size:3

peek:aaa

取出队头元素后的数组:[null, bbb, ccc]

取出元素:aaa

取出队头元素后的数组:[null, null, ccc]

取出元素:bbb

取出队头元素后的数组:[null, null, null]

取出元素:ccc

取出元素:null

size:0



分享到:
评论

相关推荐

    数组实现队列

    由数组实现队列,包括队列的创建、入队和出队。通过打印显示出队的结果。正在学习数据结构的童鞋可以参考。

    用数组实现的优先队列(JAVA)

    NULL 博文链接:https://128kj.iteye.com/blog/1665616

    【Java数据结构与算法】队列

    示意图:(使用数组模拟队列示意图) 数组模拟队列思路 队列本身是个有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如图,其中5是该队列的最大容量(只代表我这个图) 因为队列的输出,输入都是...

    shell简单模拟20160112

    shell简单模拟,最多记录10条历史指令.rar

    Java数组模拟优先级队列数据结构的实例

    主要介绍了Java数组模拟优先级队列数据结构的实例,优先级队列中的元素会被设置优先权,本文的例子借助了Java中的TreeSet和TreeMap,需要的朋友可以参考下

    Java数据结构与算法02——队列

    数组模拟队列3.队列运行测试 1.队列的概念 队列同样是一种特殊的线性表,其插入和删除的操作分别在表的两端进行,队列的特点就是先进先出(First In First Out)。我们把向队列中插入元素的过程称为入队(Enqueue),...

    ArrayQueue.java

    java使用数组模拟普通队列

    桶排序c编程附加队列

    桶排序 c编程 附加链队列 和顺队列 1)设置10个桶,也即一个有10个元素的队列数组,每个队列的成员有一个整形数组; 2)从键盘输入30个非负整数;3)找出这30个数中大的数,并计算出它的位数; 4)按照桶排序步骤,...

    实验4 队列.zip

    实验4 队列.zip

    CircleArrayQueue.java

    java代码使用数组模拟循环队列

    一个Pascal(杨辉)三角形的C语言26种方式实现合集

    结合静态二维数组、静态一维数组模拟静态二维数组、动态二维数组、动态二维交错数组、动态一维数组模拟动态二维数组、动态一维数组、队列、文本文件和二进制文件多种数据存储与管理方式,用26种方法实现了Pascal...

    数据结构与算法&队列

    数组模拟队列 队列本身是一个有序列表,使用队列时插入在一端进行而删除则在另一端进行。下图是队列的一个抽象模型。 因为队列的基本操作是入队和出队,因此需要两个变量front和rear分别记录队列前后端的下标,一...

    leetcode最大蓄水量-algorithm-go:记录golang数据结构及leetCode刷题算法

    数组模拟队列 circelqueue 数组模拟环形队列 singlequeue 单向链表 doublelink 双向链表 circlesinglelink 环形链表 josephu 约瑟夫环 bubblesort 冒泡排序 selectsort 选择排序 insertsort 插入排序 quicksort 快速...

    DOS的文件分配表策略的模拟实现

    1、设可用磁盘空间总共300个簇,因此你设置的FAT数组或队列只有300项。运行开始时全为空闲。设一个FAT即可。 2、以文件为单位申请和释放簇(意味着创建、删除和修改文件),文件所占簇数由你自己随机产生。你的程序...

    约瑟夫生死游戏队列实现

    约瑟夫生死游戏 常见于队列的练习 属于经典算法

    MangoDowner#clear-leetcode#面试题03.04.化栈为队1

    1、go里面没有栈这个数据结构,可以用数组模拟 2、既然是用栈模拟队列,就不能有按索引直接访问数组元素的操作,直接访问数组模拟的栈最后一个元素,也就是栈顶元素

    优先队列-双端堆

    个人认为这种数据结构还是蛮简单方便的,当然,为了更简便,我使用了2个数组来模拟小顶堆和大顶堆。 编写起来,取得了蛮好的效果。~ 查询最大优先队列的元素,和最小优先队列的元素,时间复杂度为o(1) 因为...

    acwing和leetcode-Algorithm:acwinglabuladongleetcode

    数组模拟队列 9、单调栈 单调栈 10、单调队列 滑动窗口 11、KMP 12、Trie树 Trie字符串统计(1) Trie字符串统计(2) Trie字符串统计(3) 13、并查集 合并集合 连通块中点的数量 labuladong专题 二叉树 二叉树的最近公共...

    数据结构实验三(循环队列基本操作)题目和源程序

    实验内容 1.任意输入队列长度和队列中的元素值,构造一个顺序循环队列,对其进行清空、插入新元素、返回队头元素以及删除队头元素操作...编写程序选择循环队列作为存储结构模拟整个过程,并依次输出出列的各人的编号。

    邓炜PHP基本语法(二)PHP数组

    因此可以把它当成真正的数组(真正的数组在前面的课程javascript已经学过了,这里只介绍与以前数组之间的区别)来使用,或列表(矢量),散列表(是图的一种实现),字典,集合,栈,队列以及更多可能性。...

Global site tag (gtag.js) - Google Analytics