关于Java队列的编程

     队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

1、创建队列的接口

package org.nkty.trb.itf;
/**
 * 队列
 * @author Aitex
 * 线式存储
 */
public interface Queue {
/**
* 获取队的大小
* @return 
*/
public int getSize();
/**
* 判断队列是否为空
* @return 
*/
public boolean isEmpty();
/**
* 入队
* @param e 传入参数
*/
public void enqueue(Object e);
/**
* 出队
* @return 返回队中对象
*/
public Object dequeue();
/**
* 取出队首元素
* @return 返回对中对象
*/
public Object peek();
}

2、实现队列的接口

package org.nkty.trb.impl;
import org.nkty.trb.itf.Queue;
import MyException.MyQueueException;
public class MyQueue implements Queue{
private final static int CAP = 7;//队列的默认大小
private Object[] element;//数据元素数组
private  int length;//数组长度
private int frist;//队首指针
private int last;//队尾指针
public MyQueue(){
this(CAP);
}
public MyQueue(int cap){
length = cap+1;
element = new Object[length];
frist = last = 0;
}
@Override
public int getSize() {
// TODO Auto-generated method stub
return (last - frist + length)%length;
}
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return frist == last;
}
@Override
public void enqueue(Object e) {
// TODO Auto-generated method stub
if(getSize() == length-1) expandSpace();
element[last] = e;
last = (last+1)%length;
}
public void expandSpace(){
Object [] a = new Object[element.length*2];
int i = frist; int j = 0;
while(i != last){
a[j++] = element[i];
i = (i+1)%length;
}
element = a;
length =element.length;
frist = 0 ; last = j;//设置新的队首、队尾
}
@Override
public Object dequeue() {
// TODO Auto-generated method stub
if(isEmpty()) 
throw new MyQueueException("出错!该队列为空!");
Object obj = element[frist];
element[frist] = null;
frist = (frist+1)%length;
return obj;
}
@Override
public Object peek() {
// TODO Auto-generated method stub
if(isEmpty())
throw new MyQueueException("出错!该队列为空!");
return element[frist];
}
}

3、创建自定义异常

package MyException;
public class MyQueueException extends RuntimeException{
/**

*/
private static final long serialVersionUID = -6617273264657412593L;
public MyQueueException(String err){
super(err);
}
}

4、例程

package TestDriver;
import org.nkty.trb.impl.MyQueue;
public class Test2 {
public static void main(String[] args) {
String [] string = {"0","1","2","3","4","5","6","7","8","9"}; 
doTest1(string);
}
/**
* 存入数字0-9,并将该数字打印出来
* @param s
*/
public static void doTest1(String [] s){
MyQueue mq = new MyQueue();
for (int i = 0; i < s.length; i++) {
mq.enqueue(s[i]);
}
while(!mq.isEmpty()) System.out.print(mq.dequeue());
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值