职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 1155|回复: 0

如何编写一个JAVA的队列类?

[复制链接]
joe 发表于 2007-1-23 19:18 | 显示全部楼层 |阅读模式
队列是设计程序中常用的一种数据结构。它类似日常生活中的排队现象,采用一种被称为“先进先出”(LIFO)的存储结构。数据元素只能从队尾进入,从队首取出。在队列中,数据元素可以任意增减,但数据元素的次序不会改变。每当有数据元素从队列中被取出,后面的数据元素依次向前移动一位。所以,任何时候从队列中读到的都是队首的数据。

根据这些特点,对队列定义了以下六种操作:

enq(x) 向队列插入一个值为x的元素;

deq() 从队列删除一个元素;

front() 从队列中读一个元素,但队列保持不变;

empty() 判断队列是否为空,空则返回真;

clear() 清空队列;

search(x) 查找距队首最近的元素的位置,若不存在,返回-1。

 

Vector类是JAVA中专门负责处理对象元素有序存储和任意增删的类,因此,用Vector可以快速实现JAVA的队列类。

public class Queue extends java.util.Vector {

public Queue() {

super();

}

public synchronized void enq(Object x) {

super.addElement(x);

}

public synchronized Object deq() {

/* 队列若为空,引发EmptyQueueException异常 */

if( this.empty() )

throw new EmptyQueueException();

Object x = super.elementAt(0);

super.removeElementAt(0);

return x;

}

public synchronized Object front() {

if( this.empty() )

throw new EmptyQueueException();

return super.elementAt(0);

}

public boolean empty() {

return super.isEmpty();

}

public synchronized void clear() {

super.removeAllElements();

}

public int search(Object x) {

return super.indexOf(x);

}

}

public class EmptyQueueException extends java.lang.RuntimeException {

public EmptyQueueException() {

super();

}

}

以上程序在JDK1.1.5下编译通过。
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-13 08:45 , Processed in 0.131131 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表