数据结构--循环双端队列的创建


前言

循环双端队列(Circular Deque)是一种数据结构,结合了队列(Queue)和双端队列(Deque)的特性。它允许从两端添加和移除元素,具备了队列和栈的功能,但是在操作上更为灵活和高效。
在创建循环双端队列之前,我们需要考虑几个关键的设计和实现细节:

1.数据结构的选择:循环双端队列通常基于数组(Array)或者链表(Linked List)实现。数组实现简单且内存连续,方便随机访问,但需要处理扩容和缩容的问题;链表实现则动态管理内存,插入删除操作更为灵活,但可能存在额外的空间开销和指针操作。
2.循环数组的设计:为了实现循环队列的特性,我们可以使用数组,并利用模运算来实现环形结构。具体来说,我们需要考虑如何处理队列头尾指针的移动,确保在数组尾部达到最大容量时能够循环到数组头部,形成一个环形结构。
3.操作实现:循环双端队列支持的操作包括:

在队头和队尾添加元素
在队头和队尾弹出元素
判断队列是否为空

创建循环双端队列时,以上考虑因素是设计和实现的基础,通过合理选择数据结构和正确实现操作,可以使得循环双端队列具备高效的性能和灵活的应用场景。


一、循环双端队列实现思路

1.定义内部变量:limit(队列最高容量)、size(当前队列存在的数据个数)和链表。
2.构造函数:使用构造函数对队列进行初始化,即对limit、size进行赋值。
3.从头部插入数据:判断当前队列是否已满,如果未满则将当前队列存在数据个数加一并通过链表函数往链表头部中加入要插入的数据。
4.从尾部插入数据:判断当前队列是否已满,如果未满则将当前队列存在数据个数加一并通过链表函数往链表尾部中加入要插入的数据。
5.判断队列是否已满:直接返回当前队列存在的数据个数与定义的队列最高容量是否相等。
6.从头部弹出数据:判断当前队列是否为空,如果不为空则将当前队列存在数据个数减一并通过链表函数往链表尾部中弹出要插入的数据。并将弹出的数据返回。
7.从尾部弹出数据:判断当前队列是否为空,如果不为空则将当前队列存在数据个数减一并通过链表函数往链表头部中弹出要插入的数据。并将弹出的数据返回。
8.判断队列是否为空:直接返回当前队列存在的数据个数是否为0。

二、具体代码

package javasmart;

import java.util.Deque;
import java.util.LinkedList;

public class MyCircularDequeue {

    int limit;
    int size;
    Deque<Integer> de;

    public MyCircularDequeue(int i){
        limit=i;
        size=0;
        de=new LinkedList<>();
    }
    public void inseartFist(int value){
        if(!isFull()){
            size++;
            de.addFirst(value);
        }
    }
    public boolean isFull(){
        return size==limit;
    }
    public void insertLast(int value) {
        if (isFull()) {
            size++;
            de.addLast(value);
        }
    }
    public Integer popFirst(){
        if(!isEmpty()){
            size--;
            return de.pollFirst();
        }
        return -1;
    }
    public Integer popLast(){
        if(!isEmpty()){
            size--;
            return de.pollLast();
        }
        return -1;
    }
    public boolean isEmpty(){
        return size==0;
    }

}

总结

通过自行创建出一个能够满足使用的循环双端队列能够使我们对java的底层逻辑有更深的理解,也方便我们解决后续可能会出现的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值