加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

ArrayDeque是一个经典的双向队列

发布时间:2021-06-04 11:31:00 所属栏目:编程 来源:互联网
导读:计划实现双端行列,着实你常常行使的ArrayDeque就是一个经典的双向行列,其基于数组实现,服从很是高。我们这里实现的双向行列模板基于力扣641 计划轮回双端行列
副问题[/!--empirenews.page--]

计划实现双端行列,着实你常常行使的ArrayDeque就是一个经典的双向行列,其基于数组实现,服从很是高。我们这里实现的双向行列模板基于力扣641 计划轮回双端行列 。

你的实现必要支持以下操纵:

MyCircularDeque(k):结构函数,双端行列的巨细为k。

insertFront():将一个元素添加到双端行列头部。假如操纵乐成返回 true。

insertLast():将一个元素添加到双端行列尾部。假如操纵乐成返回 true。

deleteFront():从双端行列头部删除一个元素。假如操纵乐成返回 true。

deleteLast():从双端行列尾部删除一个元素。假如操纵乐成返回 true。

getFront():从双端行列头部得到一个元素。假如双端行列为空,返回 -1。

getRear():得到双端行列的最后一个元素。假如双端行列为空,返回 -1。

isEmpty():搜查双端行列是否为空。

isFull():搜查双端行列是否满了。

着实有了上面的基本,实现一个双端行列很是轻易,有许多操纵和单端的轮回行列是同等的,只有多了一个队头插入和队尾删除的操纵,两个操纵别离简朴的说明一下:

队头插入:队友front下标位置自己是有值的,以是要将front退后一位然后再赋值,不外要思量是否为满可能数组越界环境。

队尾删除:只必要rear位置减1,同时也要思量是否为空和越界环境。

详细实当代码:

public class MyCircularDeque { 

    private int data[];// 数组容器 

    private int front;// 头 

    private int rear;// 尾 

    private int maxsize;// 最大长度 

    /*初始化 最大巨细为k */ 

    public MyCircularDeque(int k) { 

        data = new int[k+1]; 

        front = 0; 

        rear = 0; 

        maxsize = k+1; 

    } 

 

    /** 头部插入 */ 

    public boolean insertFront(int value) { 

        if(isFull()) 

            return false; 

        else { 

            front=(front+maxsize-1)%maxsize; 

            data[front]=value; 

        } 

        return  true; 

    } 

 

    /** 尾部插入 */ 

    public boolean insertLast(int value) { 

        if(isFull()) 

            return  false; 

        else{ 

            data[rear]=value; 

            rear=(rear+1)%maxsize; 

        } 

        return  true; 

    } 

 

    /** 正常头部删除 */ 

    public boolean deleteFront() { 

        if (isEmpty()) 

            return false; 

        else { 

            front=(front+1)%maxsize; 

        } 

        return  true; 

    } 

 

    /** 尾部删除 */ 

    public boolean deleteLast() { 

        if(isEmpty()) 

            return false; 

        else { 

            rear=(rear+maxsize-1)%maxsize; 

        } 

        return true; 

    } 

 

    /** Get the front item  */ 

    public int getFront() { 

        if(isEmpty()) 

            return -1; 

        return data[front]; 

    } 

 

    /** Get the last item from the deque. */ 

    public int getRear() { 

        if(isEmpty()) 

            return -1; 

        return  data[(rear-1+maxsize)%maxsize]; 

    } 

 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读