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
分享到:
相关推荐
由数组实现队列,包括队列的创建、入队和出队。通过打印显示出队的结果。正在学习数据结构的童鞋可以参考。
NULL 博文链接:https://128kj.iteye.com/blog/1665616
示意图:(使用数组模拟队列示意图) 数组模拟队列思路 队列本身是个有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如图,其中5是该队列的最大容量(只代表我这个图) 因为队列的输出,输入都是...
shell简单模拟,最多记录10条历史指令.rar
主要介绍了Java数组模拟优先级队列数据结构的实例,优先级队列中的元素会被设置优先权,本文的例子借助了Java中的TreeSet和TreeMap,需要的朋友可以参考下
数组模拟队列3.队列运行测试 1.队列的概念 队列同样是一种特殊的线性表,其插入和删除的操作分别在表的两端进行,队列的特点就是先进先出(First In First Out)。我们把向队列中插入元素的过程称为入队(Enqueue),...
java使用数组模拟普通队列
桶排序 c编程 附加链队列 和顺队列 1)设置10个桶,也即一个有10个元素的队列数组,每个队列的成员有一个整形数组; 2)从键盘输入30个非负整数;3)找出这30个数中大的数,并计算出它的位数; 4)按照桶排序步骤,...
实验4 队列.zip
java代码使用数组模拟循环队列
结合静态二维数组、静态一维数组模拟静态二维数组、动态二维数组、动态二维交错数组、动态一维数组模拟动态二维数组、动态一维数组、队列、文本文件和二进制文件多种数据存储与管理方式,用26种方法实现了Pascal...
数组模拟队列 队列本身是一个有序列表,使用队列时插入在一端进行而删除则在另一端进行。下图是队列的一个抽象模型。 因为队列的基本操作是入队和出队,因此需要两个变量front和rear分别记录队列前后端的下标,一...
数组模拟队列 circelqueue 数组模拟环形队列 singlequeue 单向链表 doublelink 双向链表 circlesinglelink 环形链表 josephu 约瑟夫环 bubblesort 冒泡排序 selectsort 选择排序 insertsort 插入排序 quicksort 快速...
1、设可用磁盘空间总共300个簇,因此你设置的FAT数组或队列只有300项。运行开始时全为空闲。设一个FAT即可。 2、以文件为单位申请和释放簇(意味着创建、删除和修改文件),文件所占簇数由你自己随机产生。你的程序...
约瑟夫生死游戏 常见于队列的练习 属于经典算法
1、go里面没有栈这个数据结构,可以用数组模拟 2、既然是用栈模拟队列,就不能有按索引直接访问数组元素的操作,直接访问数组模拟的栈最后一个元素,也就是栈顶元素
个人认为这种数据结构还是蛮简单方便的,当然,为了更简便,我使用了2个数组来模拟小顶堆和大顶堆。 编写起来,取得了蛮好的效果。~ 查询最大优先队列的元素,和最小优先队列的元素,时间复杂度为o(1) 因为...
数组模拟队列 9、单调栈 单调栈 10、单调队列 滑动窗口 11、KMP 12、Trie树 Trie字符串统计(1) Trie字符串统计(2) Trie字符串统计(3) 13、并查集 合并集合 连通块中点的数量 labuladong专题 二叉树 二叉树的最近公共...
实验内容 1.任意输入队列长度和队列中的元素值,构造一个顺序循环队列,对其进行清空、插入新元素、返回队头元素以及删除队头元素操作...编写程序选择循环队列作为存储结构模拟整个过程,并依次输出出列的各人的编号。
因此可以把它当成真正的数组(真正的数组在前面的课程javascript已经学过了,这里只介绍与以前数组之间的区别)来使用,或列表(矢量),散列表(是图的一种实现),字典,集合,栈,队列以及更多可能性。...