Queue-java
来源:互联网 发布:php手册下载 编辑:程序博客网 时间:2024/06/05 05:55
队列的链式与数组仿真JAVA实现
文件清单如下:
Node.java //链结点接口
SLNode.java //链结点实现
QueueEmptyException.java//队列异常处理类
Queue.java //队列接口定义类
QueueSLinked.java //链式结构实现队列
QueueArray.java //循环数组实现队列
queueDemo.java //测试队列功能
*******************************************************
//complied OK with Eclipse
//Node.java
//链结点接口
package dsa.datastruct;
public interface Node{
//获取结点数据域
public Object getData();
//设置结点数据域
public void setData(Object obj);
}
*******************************************************
//complied OK with Eclipse
//SLNode.java
//链结点实现
package dsa.datastruct;
public class SLNode implements Node{
private Object element; //数据成员
private SLNode next; //指向下一个成员结点
//两个构造器
public SLNode(){this(null,null);}
public SLNode(Object obj, SLNode nextnode){
this.element=obj;
this.next =nextnode;
}
//2对属性读取器
public void setNext(SLNode nextnode){this.next=nextnode;}
public SLNode getNext(){return next;}
public void setData(Object obj){element=obj;}
public Object getData(){return element;}
}
*******************************************************
//file name: QueueEmptyException.java
//队列异常处理类
package dsa.datastruct;
public class QueueEmptyException extends RuntimeException{
public QueueEmptyException(String err) {
super(err);
}
}
*******************************************************
//file name Queue.java
//队列接口定义类
package dsa.datastruct;
import dsa.datastruct.QueueEmptyException;
public interface Queue {
//返回队列的大小
public int getSize();
//判断队列是否为空
public boolean isEmpty();
//数据元素e入队
public void enqueue(Object e);
//队首元素出队
public Object dequeue() throws QueueEmptyException;
//取队首元素
public Object peek() throws QueueEmptyException;
}
*******************************************************
//file name: QueueSLinked.java
//complied ok with eclipse
//队列的链式实现类
package dsa.datastruct;
import dsa.datastruct.QueueEmptyException;//导入队列异常处理类
public class QueueSLinked implements Queue {
private SLNode front; //头结点
private SLNode rear; //尾结点
private int size; //队列结点数
//0.构造器
public QueueSLinked(){
front =new SLNode();
rear =front;
size =0;
}
//1.返回队列大小
public int getSize() { return size;}
//2.判断队列是否为空
public boolean isEmpty() {return size==0;}
//3.数据元素e入队
public void enqueue(Object e) {
SLNode p=new SLNode(e,null);
rear.setNext(p);
rear =p;
size++;
}
//4.队首元素出队
public Object dequeue() throws QueueEmptyException {
if (size<1) throw new QueueEmptyException("错误:队列为空");
SLNode p =front.getNext();//取得结点
front.setNext(p.getNext()); //头结点指向下一个结点
size--; //结点个数减1
if (size<1) rear=front; //如果结点个数<1,则尾结点指向头结点
return p.getData(); //返回结点p的数据
}
//5.取队首元素
public Object peek() throws QueueEmptyException {
if (size<1) throw new QueueEmptyException("错误:队列为空");
return front.getNext().getData();//返回头结点的数据
}
}
*******************************************************
//file name: QueueArray.java
//complied ok with eclipse
//循环数组实现队列
package dsa.datastruct;
import dsa.datastruct.QueueEmptyException;
public class QueueArray implements Queue {
private static final int CAP=8;//队列默认大小
private Object[] elements; //数组elements
private int capacity; //数组大小
private int front; //队首指针
private int rear; //队尾指针
//0.构造器
public QueueArray(){this(CAP);}
public QueueArray(int size){
capacity =size + 1;
elements =new Object[capacity];
front =0;
rear =0;
}
//1.返回队列的大小
public int getSize() { return (capacity - front +rear)%capacity; }
//2.判断队列是否为空
public boolean isEmpty() { return front==rear;}
//3.数据元素e入队
public void enqueue(Object e) {
if(getSize()==(capacity-1))
expandSpace(); //修正数组
elements[rear]=e; //插入数据
rear=(rear+1)%capacity;//修正尾指针
}
//4.队首元素出队
public Object dequeue() throws QueueEmptyException {
if(isEmpty()) throw new QueueEmptyException("错误:队列为空");
Object obj=elements[front];//取得队首数据
elements[front]=null; //置队首为空
front=(front+1)%capacity;//修正队首指针
return obj;
}
//5.取队首元素
public Object peek() throws QueueEmptyException {
if(isEmpty()) throw new QueueEmptyException("错误:队列为空");
return elements[front];//直接返回数组的队首元素
}
//修正循环数组私有函数
private void expandSpace(){
Object[] a = new Object[elements.length*2];
int i=front;
int j=0;
while(i!=rear){a[j++]=elements[i]; i=(i+1)%capacity;}
elements=a;
capacity=elements.length;
front=0;
rear=j;
}
}
*******************************************************
//file name: queueDemo.java
//complied ok with Eclipse 3.40
//测试队列功能
package dsa.test;
import dsa.datastruct.*;
public class queueDemo {
public static void main(String[] args) {
QueueArray q1 = new QueueArray(10);//循环数组仿真队列
q1.enqueue(15);
q1.enqueue(22);
q1.enqueue(38);
q1.dequeue();
System.out.println("q1.isEmpty()="+q1.isEmpty());
System.out.println("q1.peek()="+q1.peek());
System.out.println("q1.getSize()="+q1.getSize());
QueueSLinked q2 = new QueueSLinked();//链点仿真队列
q2.enqueue(100);
q2.enqueue(200);
q2.enqueue(300);
q2.dequeue();
System.out.println("q2.isEmpty()="+q2.isEmpty());
System.out.println("q2.peek()="+q2.peek());
System.out.println("q2.getSize()="+q2.getSize());
}
}
运行结果:
q1.isEmpty()=false
q1.peek()=22
q1.getSize()=2
q2.isEmpty()=false
q2.peek()=200
q2.getSize()=2
- Queue-java
- Java: Queue
- Java: Queue
- Queue [Java]
- Queue Java
- java Queue
- 【java】Queue
- Java - Queue Stack
- java Queue的使用
- java Queue 的用法
- 解读java.util.queue
- Java Queue Example
- 学习Java: Queue
- Java文件Queue实现
- java Queue 的用法
- java 队列Queue
- Java Queue队列
- java Queue 的用法
- VMware虚拟机安装、配置、搭建网络教程
- 简单的问题
- 2008.09.01 晴
- 博客开播了
- linux静态链接库与动态链接库的区别及动态库的创建
- Queue-java
- 郭德纲经典爆笑语录!!!(肚子疼别找我!!!)
- .net项目开发工具(V3.0 )
- stack-java
- [转] 网站架构文章和MySQL在国际知名网站中的使用量
- MOSS字段编辑权限控制方案的实现(1)-管理页面的开发和配置信息的持久化
- 小议sns与web game
- 二叉树实现-java
- 端口80被占用的解决方法