简单数据结构实现——队列
来源:互联网 发布:淘宝开店经验总结 编辑:程序博客网 时间:2024/06/05 09:19
队列 (queue) ,基本数据结构之一,属于FIFO(先进先出)数据结构。队列只允许在前端 (HEAD) 进行入队(插入)操作,只允许在后端 (TAIL) 进行出队(删除)操作。
单队列可以使用链表来实现,实现非常简单,队列的长度也没有限制,但是插入和读取的时间代价较高。
循环队列可以使用数组来实现,因此操作起来很快,但是长度一般固定。但是可以通过设计一个扩大容量的方法来使其长度可变。
在后面给出的代码是基于数组的循环队列实现。
另外,有一种所谓的优先队列,实际上是依靠堆的结构来实现的,在以后练习到堆的时候会再提及。
简述循环队列实现原理:利用两个下标来确定队列范围:head 与 tail. 队列的默认构造器将使构造长度为DEFAULT_CAPACITY=10的队列,带整数参数的构造器将构造相应长度的队列。
队列另外有两个属性size和capacity,size表明队列中的元素个数,capacity表明当前队列的容量(可容纳元素个数)。
每当有元素入队时,size加一,每当有元素退队时,size减一。
因此可以简单通过size==0和size==capacity来判断isEmpty和isFull.
入队操作:当队列不为满的时候,在下标为tail的位置插入元素,自增size,调整tail的值: if(++tail==queue.length){tail=0;}
退队操作:当队列不空的时候,记录头元素的值,自减size,调整head的值: if(++head==queue.length){head=0;},返回头元素的值。
扩容方法 enlarge():当调用该方法时,将capacity*=2,容量增加一倍,然后创建新的数组,再将旧数组中的值复制到新数组中,在新数组中的位置将从0位置开始向后排列,具体实现看代码。
java代码:
public class MyQueue{public int size=0,head=0,tail=0;private final int DEFAULT_CAPACITY=10;private int capacity;private int[] queue;public MyQueue(){queue=new int[DEFAULT_CAPACITY];capacity=DEFAULT_CAPACITY;}public MyQueue(int capacity){queue=new int[capacity];this.capacity=capacity;}public void enqueue(int element){if(!isFull()){queue[tail]=element;size++;if(++tail==queue.length){tail=0;}}else{System.out.println("Queue is full, use enlarge() method to enlarge.");}}public int dequeue(){if(!isEmpty()){int x=queue[head];size--;if(++head==queue.length){head=0;}return x;}else{System.out.println("Queue is empty, cannot dequeue!");return Integer.MIN_VALUE;}}public int size(){return size;}public boolean isEmpty(){return size==0;}public boolean isFull(){return size==capacity;}public void enlarge(){capacity*=2;int[] newQueue=new int[capacity];int count=0,index=head;while(++count<=size){newQueue[count]=queue[index];count++;if(++index==queue.length){index=0;}}queue=newQueue;head=0;tail=size;}public String toString(){String str="";if(isEmpty()) return "This is an empty stack";else{str+="[";int index=head,count=0;while(++count<=size()){str+=" "+queue[index];if(++index==queue.length){index=0;}}str+=" ]";}return str;}public int getCapacity(){return capacity;}}
- 简单数据结构实现——队列
- 简单数据结构—队列
- 数据结构——循环队列的简单实现
- 简单说一说数据结构——队列
- 简单数据结构的实现之链队列
- 简单数据结构的实现之循环队列
- 数据结构7:队列的简单实现
- 数据结构之简单队列的实现
- [数据结构]队列的C语言简单实现
- 数据结构Java实现——②队列
- 数据结构(Java)——队列的实现
- JavaScript数据结构——队列的实现
- JavaScript数据结构——队列的实现
- 数据结构——队列(C++实现)
- 数据结构——Java实现队列
- 数据结构——使用双端链表实现队列(java实现)
- 数据结构Java实现——②队列--->队列的“奇葩”一循环顺序队列
- 数据结构Java实现——②队列-->队列的“奇葩”二 优先级队列
- 34个漂亮的应用程序后台管理系统界面(系列二)
- Jquery checkbox全选简单用法
- Android从零开始(三)
- Toast的使用
- 初识 存储控制器
- 简单数据结构实现——队列
- 非常有用的免费UI设计工具和资源
- BitmapFactory decoding大文件中产生OutOfMemoryError解决方案
- 数据操作后,页面alert提示例子3-后台js打印提示信息并重定向
- 30个免费下载高质量精美照片素材的网站
- 打造ios客户端产品的一些经验教训
- Flex 的数据绑定观察
- EventThread线程对VSync的分发
- 监听Android键盘上的按钮