`
modun
  • 浏览: 148521 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

双向循环队列的数组实现

阅读更多

需要说明的是此算法我并没有测试过,所以只能用用来参考!

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数据结构与算法之双向循环队列的数组实现方法,主要讲解了如何在Java中实现一个双向循环队列。双向循环队列是一种具有两个端口的数据结构,可以分别从队列的两端插入和删除元素。队列的两端都可以被视为队首,...

    《数据结构c++版》队列操作(双向队列¥循环队列)

    本节主要讨论的是《数据结构C++版》中队列的操作,特别是双向队列和循环队列的概念和实现。 首先,我们来看双向队列。与传统的单向队列(只能从一端入队,另一端出队)不同,双向队列允许在两端进行入队和出队操作...

    一个串口循环队列,可以制作协议收发,非常好用

    循环队列是一种线性数据结构,它利用数组的循环特性来实现队列的操作。在常规队列满或空的情况下,循环队列能避免这些问题,因为它可以在队尾出队后立即在原位置入队,从而提高效率。在串口通信中,循环队列常用于...

    php基于双向循环队列实现历史记录的前进后退等功能

    实现这一功能,需要一种数据结构可以高效地在操作序列中移动,而双向循环队列正是满足这种需求的理想结构。 ### PHP 实现方法与技巧 #### 构建历史记录类 在PHP中,可以通过编写一个名为`history.class.php`的类...

    双向列表实现队列程序

    双向列表相较于单链表或数组,提供了更灵活的前后插入和删除操作,适合构建队列这种先进先出(FIFO)的数据结构。 首先,我们需要了解队列的基本概念。队列是一种线性数据结构,分为前端(front)和后端(rear),...

    利用C++实现以下经典数据结构算法:线性表、栈、队列、数组(特殊矩阵、稀疏矩阵压缩)、串(朴素模式匹配、KMP算法)、树.zip

    利用C++实现以下经典数据结构与算法:线性表(顺序表、链表、静态链表、三元组)、栈(双栈、共享栈)、队列(任务调度、循环队列、双向队列、链队列)、数组(特殊矩阵、稀疏矩阵压缩)、串(朴素模式匹配、KMP算法...

    循环队列(java演示)在不牺牲一个空间的情况下,同时不采用求模运算,如何实现,并且提高性能(csdn)————程.pdf

    3. **使用链表**:虽然这里的实现是基于数组的,但使用链表可以更方便地实现循环队列,不需要考虑数组边界问题,且插入和删除操作的时间复杂度可以降低到O(1)。 4. **线程安全**:如果在多线程环境中使用,需要添加...

    数据结构和算法必知必会的50个代码实现.zip

    【数据结构课程设计】 数组 实现一个支持动态扩容的数组 实现一个大小固定的有序数组,支持动态增删改操作 实现两个有序数组合并为一个有序数组 链表 实现单链表、循环链表、双向链表,... 实现一个循环队列 ......

    数据结构和算法必知必会的50个代码实现

    数组 实现一个支持动态扩容的数组 实现一个大小固定的有序数组,支持动态增删改操作 ...实现一个循环队列 递归 编程实现斐波那契数列求值f(n)=f(n-1)+f(n-2) 编程实现求阶乘n! 编程实现一组数据集合的全排列

    关于栈,队列和数组的初步认识

    - 使用一系列地址连续的存储单元来存储栈中的元素,一般使用一维数组实现。 - 栈顶指针`top`指向栈顶元素的下一个位置,初始时`top=0`表示栈为空。 - 进栈时,`top`加1;出栈时,`top`减1。 **栈的状态**: - 栈空...

    C语言使用非循环双向链表实现队列

    总的来说,使用非循环双向链表实现队列是一种高效且灵活的方法,它提供了快速的入队和出队操作,同时避免了数组在空间管理上的局限性。在实际编程中,这种实现方式对于处理动态变化的数据流非常有用。

    双向循环链表,对应严书的双向循环链表一章

    在实际应用中,双向循环链表常用于实现某些高级数据结构,如LRU缓存、双向队列等。此外,它也是许多高级数据结构(如红黑树)的基础组件。了解并熟练掌握双向循环链表的原理和操作,对于提升编程能力和解决复杂问题...

    C语言实现数据结构:单链表,循环链表,双向链表;静态顺序队列

    这种结构允许在链表的末尾执行更快的操作,例如在循环队列中。 3. **双向链表**: 双向链表的每个节点包含三个部分:数据域和两个指针域,分别指向前后两个节点。双向链表提供了更灵活的访问,可以从任一方向遍历...

    数据结构和算法问题及实现

    * 实现一个循环队列 ## 递归 * 编程实现斐波那契数列求值f(n)=f(n-1)+f(n-2) * 编程实现求阶乘n! * 编程实现一组数据集合的全排列 ## 排序 * 实现归并排序、快速排序、插入排序、冒泡排序、选择排序 * 编程实现O(n...

    duilie.rar_删除队列

    但有些特定的队列实现,如循环队列或双端队列(deque),允许在某些条件下进行修改。 ### 6. 查看队列状态 - **队列长度**:计算当前队列中有多少个元素。 - **是否为空**:判断队列前端和后端是否重合,如果是,...

Global site tag (gtag.js) - Google Analytics