数据结构之队列实践练习
2017-11-18 15:13
399 查看
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。
1.下面是队列的基本操作练习
测试类
队列已满,自动扩大队列至:1
队列已满,自动扩大队列至:2
队列已满,自动扩大队列至:4
队列:
1
2
3
4
5
null
null
null
出队:1
队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。
1.下面是队列的基本操作练习
public class ArrayQueue { private int front;//队首 -1表示队列为空 private int rear;//队尾 private int capacity;//数组容量 private Object[] array; public ArrayQueue() { capacity=1; front=-1; rear=-1; array= new Object[1]; } //指定初始大小 public ArrayQueue(int size){ capacity=size; front=-1; rear=-1; array=new Object[size]; } public static ArrayQueue createQueue(int size) { return new ArrayQueue(size); } public boolean isEmpty(){ return front== -1; } public boolean isFull(){ return (rear+1)%capacity==front; } //返回队列长度大小 public int getQueueSzie(){ return ((capacity-front+rear+1)%capacity); } //将队列扩大一倍 private void resizeQueue(){ int initCapacity=capacity; capacity*=2; Object oldArray[]=array; array=new Object[this.capacity]; for(int i=0;i<oldArray.length;i++){ array[i]=oldArray[i]; } if(rear<front){ for(int i=0;i<initCapacity;i++){ array[i+initCapacity]=this.array[i]; array=null; } rear=rear+initCapacity; } } /*入队思路: 1.判断是否队满 2.判断后,队尾加一赋值, 3.再判断加入队列之前,队列是否为空*/ public void enQueue(Object data){ if(isFull()){ System.out.println("队列已满,自动扩大队列至:"+capacity); resizeQueue(); } rear=(rear+1)%capacity; array[rear]=data; if(front == -1){//若队列为空,一个值入队后,队首位置等于队尾 front =rear; } } /*出队思路: 1.判断是否为空后,取出数据 2.取出数据后在判断是否数组为空,若为空将front置为-1 3.不为空则将front置为0*/ public Object deQueue(){ Object data = null; if(isEmpty()){ System.out.println("队列为空"); }else{ data=array[front]; if(front==rear){//判断队列是否为空 front=rear-1; }else{ front=(front+1)%capacity; } } return data; } public void display(){ for(int i=0;i<capacity;i++){ System.out.println(array[i]); } } }
测试类
package ArrayQueue; package ArrayQueue; public class ArrayQueueTest { public static void main(String args[]){ ArrayQueue arrayQueue=new ArrayQueue(); arrayQueue.enQueue(new Integer(1)); arrayQueue.enQueue(new Integer(2)); arrayQueue.enQueue(new Integer(3)); arrayQueue.enQueue(new Integer(4)); arrayQueue.enQueue(new Integer(5)); System.out.println("队列:"); arrayQueue.display(); System.out.println("出队:"+arrayQueue.deQueue()); } }控制台显示:
队列已满,自动扩大队列至:1
队列已满,自动扩大队列至:2
队列已满,自动扩大队列至:4
队列:
1
2
3
4
5
null
null
null
出队:1
相关文章推荐
- 数据结构实践——队列数组
- 数据结构之队列基础练习
- 数据结构实践——排队看病模拟(队列)
- 数据结构实践——队列数组
- 数据结构之单链表实践练习
- 数据结构实践—— 负数把正数赶出队列
- 数据结构——队列问题——解题分析
- 数据结构——链队列
- 数据结构与算法之队列
- 栈与队列-密码翻译(数据结构基础 第3周)
- (三)数据结构之线性表的简单实现:队列
- 数据结构二堆栈变队列,二队列变堆栈
- SDUT 2335 - 数据结构实验之队列一:排队买饭
- 数据结构之---C语言实现链式队列
- 数据结构(七)队列
- 数据结构实践——顺序串算法
- 2134-数据结构实验之栈与队列四:括号匹配
- 数据结构之用数组和链表实现队列
- 数据结构实验之队列一:排队买饭
- 数据结构—队列的顺序和链式存储