需要说明的是此算法我并没有测试过,所以只能用用来参考!
package source;
public class Deque {
private int maxSize;
private int left;
private int right;
private int nItems;
private long[] myDeque;
//constructor
public Deque(int maxSize){
this.maxSize = maxSize;
this.myDeque = new long[this.maxSize];
this.nItems = 0;
this.left = this.maxSize;
this.right = -1;
}
//insert a number into left side
public void insertLeft(long n){
if(this.left==0) this.left = this.maxSize;
this.myDeque[--this.left] = n;
this.nItems++;
}
//insert a number into right side
public void insertRight(long n){
if(this.right==this.maxSize-1) this.right = -1;
this.myDeque[++this.right] = n;
this.nItems++;
}
//remove from left
public long removeLeft(){
long temp = this.myDeque[this.left++];
if(this.left==this.maxSize) this.left = 0;
this.nItems--;
return temp;
}
//remove from right
public long removeRight(){
long temp = this.myDeque[this.right--];
if(this.left==-1) this.left = this.maxSize-1;
this.nItems--;
return temp;
}
//return true if deQue is empty
public boolean isEmpty(){
return (this.nItems==0);
}
//return size of the deQue
public int size(){
return this.nItems;
}
}
双向循环队列的用处很大,可以做为普通队列,也可以用来做栈来用!
分享到:
相关推荐
Java数据结构与算法之双向循环队列的数组实现方法,主要讲解了如何在Java中实现一个双向循环队列。双向循环队列是一种具有两个端口的数据结构,可以分别从队列的两端插入和删除元素。队列的两端都可以被视为队首,...
本节主要讨论的是《数据结构C++版》中队列的操作,特别是双向队列和循环队列的概念和实现。 首先,我们来看双向队列。与传统的单向队列(只能从一端入队,另一端出队)不同,双向队列允许在两端进行入队和出队操作...
实现这一功能,需要一种数据结构可以高效地在操作序列中移动,而双向循环队列正是满足这种需求的理想结构。 ### PHP 实现方法与技巧 #### 构建历史记录类 在PHP中,可以通过编写一个名为`history.class.php`的类...
循环队列是一种线性数据结构,它利用数组的循环特性来实现队列的操作。在常规队列满或空的情况下,循环队列能避免这些问题,因为它可以在队尾出队后立即在原位置入队,从而提高效率。在串口通信中,循环队列常用于...
双向列表相较于单链表或数组,提供了更灵活的前后插入和删除操作,适合构建队列这种先进先出(FIFO)的数据结构。 首先,我们需要了解队列的基本概念。队列是一种线性数据结构,分为前端(front)和后端(rear),...
利用C++实现以下经典数据结构与算法:线性表(顺序表、链表、静态链表、三元组)、栈(双栈、共享栈)、队列(任务调度、循环队列、双向队列、链队列)、数组(特殊矩阵、稀疏矩阵压缩)、串(朴素模式匹配、KMP算法...
3. **使用链表**:虽然这里的实现是基于数组的,但使用链表可以更方便地实现循环队列,不需要考虑数组边界问题,且插入和删除操作的时间复杂度可以降低到O(1)。 4. **线程安全**:如果在多线程环境中使用,需要添加...
【数据结构课程设计】 数组 实现一个支持动态扩容的数组 实现一个大小固定的有序数组,支持动态增删改操作 实现两个有序数组合并为一个有序数组 链表 实现单链表、循环链表、双向链表,... 实现一个循环队列 ......
数组 实现一个支持动态扩容的数组 实现一个大小固定的有序数组,支持动态增删改操作 ...实现一个循环队列 递归 编程实现斐波那契数列求值f(n)=f(n-1)+f(n-2) 编程实现求阶乘n! 编程实现一组数据集合的全排列
支持动态增删改操作实现两个有序数组合并为一个有序数组链表实现单链表、循环链表、双向链表,支持增删操作实现单链表反转实现两个有序的链表合并为一个有序链表实现求链表的中间结点栈用数组实现一个顺序栈用链表...
- 使用一系列地址连续的存储单元来存储栈中的元素,一般使用一维数组实现。 - 栈顶指针`top`指向栈顶元素的下一个位置,初始时`top=0`表示栈为空。 - 进栈时,`top`加1;出栈时,`top`减1。 **栈的状态**: - 栈空...
总的来说,使用非循环双向链表实现队列是一种高效且灵活的方法,它提供了快速的入队和出队操作,同时避免了数组在空间管理上的局限性。在实际编程中,这种实现方式对于处理动态变化的数据流非常有用。
在实际应用中,双向循环链表常用于实现某些高级数据结构,如LRU缓存、双向队列等。此外,它也是许多高级数据结构(如红黑树)的基础组件。了解并熟练掌握双向循环链表的原理和操作,对于提升编程能力和解决复杂问题...
这种结构允许在链表的末尾执行更快的操作,例如在循环队列中。 3. **双向链表**: 双向链表的每个节点包含三个部分:数据域和两个指针域,分别指向前后两个节点。双向链表提供了更灵活的访问,可以从任一方向遍历...
* 实现一个循环队列 ## 递归 * 编程实现斐波那契数列求值f(n)=f(n-1)+f(n-2) * 编程实现求阶乘n! * 编程实现一组数据集合的全排列 ## 排序 * 实现归并排序、快速排序、插入排序、冒泡排序、选择排序 * 编程实现O(n...
但有些特定的队列实现,如循环队列或双端队列(deque),允许在某些条件下进行修改。 ### 6. 查看队列状态 - **队列长度**:计算当前队列中有多少个元素。 - **是否为空**:判断队列前端和后端是否重合,如果是,...