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

本文介绍了一种基于数组实现的循环队列及其核心方法,包括入队、出队、判断队空队满等,并通过具体示例展示了队列的基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

---------------------------------------------接口定义----------------------------------

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值