您的位置:首页 > 理论基础 > 数据结构算法

数据结构(七)---循环队列的实现---java版

2016-11-16 20:50 597 查看
---------------------------------------------接口定义----------------------------------

package com.cn.hbut.dao;

public interface Queue {
public void clear();
public int length();
public boolean full();
public boolean empty();
//入队
public boolean enque(Object e);
//出队,需要删除第一个元素
public Object dlque();
//获取队头元素
public Object getf();

}

---------------------------------------------具体的实现--------------------------------

package com.cn.hbut.daoImpl;

import com.cn.hbut.dao.Queue;

/**

 * @author Administrator

 * 循环队列的实现

 */

public class SqQueue implements Queue{
Object [] elem;
int front,rear;
int len;

public SqQueue() {
len =100;
elem = new Object[len];
front=rear=0;
}
public SqQueue(int maxsz) {
len = maxsz;
elem = new Object[len];
front = rear =0;
}

@Override
public void clear() {
front = rear =0;
}

@Override
public int length() {
//循环队列需要考虑全部队满后全部出队,再入队后rear为0,而front为len-1
return (rear-front+len)%len; 
}
@Override
public boolean full() {
return (rear+1)%len==front;
}
@Override
public boolean empty() {
return front==rear;
}
@Override
public boolean enque(Object e) {
if(full()){
return false;
}
elem[rear]=e;
rear = rear+1%len;
return true;
}
//元素出队,删除队首元素
@Override
public Object dlque() {
if(empty()){
return null;
}
Object obj =elem[front];
front = (front+1)%len;
return obj;
}

@Override
public Object getf() {
if(empty()){
return null;
}
return elem[front];
}
//--------------------------------测试循环队列------------------------------
public static void main(String[] args) {
//创建一个循环队列,最多容纳元素数8
SqQueue sque = new SqQueue(8);
//开始入队
sque.enque(1);
sque.enque(2);
sque.enque(3);
sque.enque(4);
System.out.println("队列元素个数:"+sque.length());
System.out.println("队首元素:"+sque.getf());
System.out.println("队列是否为空:"+sque.empty());
System.out.println("队列是否已满"+sque.full());
System.out.println("当前出队的元素:"+sque.dlque());
System.out.println("出队后的队首元素:"+sque.getf());

}

}

测试结果:

队列元素个数:4

队首元素:1

队列是否为空:false

队列是否已满false

当前出队的元素:1

出队后的队首元素:2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息