数据结构(七)---循环队列的实现---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
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
相关文章推荐
- 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
- 数据结构(java语言描述)-- 队列的循环数组实现
- 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
- 数据结构:循环队列--Java实现
- 数据结构Java实现——②队列--->队列的“奇葩”一循环顺序队列
- JAVA数据结构之循环队列的实现
- 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
- 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
- 数据结构学习----顺序循环队列(Java实现)
- 循环队列-顺序存储-Java实现
- (数据结构与算法分析 四)------数组循环队列的实现( Java语言描述)
- 【Java数据结构】2.4单循环链表的实现
- 循环队列与优先级队列的Java实现
- 数据结构:双向链表实现队列与循环链表
- 使用数组实现栈和循环队列(JAVA语言)
- 一步一步学数据结构之1--1(队列--线性表实现--不存在循环)
- 【数据结构】之队列的java实现(一)
- 【自己动手写数据结构】 -- 循环队列的表示与实现
- java实现栈,队列数据结构
- 数据结构:双向链表实现队列与循环链表