ArrayDeque是一个经典的双向队列
副问题[/!--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]; }
(编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |