数据结构之--队列(Java代码)
来源:互联网 发布:然并卵网络用语 编辑:程序博客网 时间:2024/06/10 08:15
队列是一种特殊的线性表,只允许在表的前端进行删除,在表的后端进行插入,表的前端称为(front)队头,表的后端称为(rear)队尾。
所以队列跟生活的场景很是相似,在电影院买电影票,人们排成一排,第一个人进入队尾最先到达队头后买票进入影院,后面排队的人按照排队的次序买到票后进入影院。
所以 队列是一种先进先出的数据结构(FIFO)。
当队列的插入数据时,Rear箭头一直从头往后走,插入到表的最大下标的位置后停止。在移除数据的时候,Front箭头也会一直从头往后走。
这可能跟现实中的人们在电影院买电影票的情况有点不符合,一般是买完票,人就往前走,继续买票,队伍总是向前移动的。
在计算机中,队列每删除一个数据项后,其他数据也可以继续往移动,但如此一来,处理很大的数据的时候,这样做的效率很低下,因为每次删除一个数据就要将剩余的所有数据往前移动。
在删除数据的时候,队头(Front)前面的位置就会留空,但由于队尾(Rear)和队头(Front)这两个箭头都一直从头往后走,所以当Rear箭头到达队尾后,而又移除了一些数据,这时没能继续利用到前面空单元的存储空间。
为了避免队列不满却不能继续插入新数据的情况,解决队列能循环利用的方法就是,当Rear箭头和Front箭头到达最大下标的位置后,重新将它的位置移动到, 表的最初始的位置。
这个就是------循环队列:
package DataStructure;/** * Created by Hubbert on 2017/11/11. */public class Queue { private int [] arr ; private int front ; //队头指针 private int rear ; //队尾指针 private int nItems ;//队列中的个数 private int maxSize;//队列长度 //使用构造函数进行初始化 public Queue( int maxSize ){ this.maxSize = maxSize ; this.arr = new int [this.maxSize]; this.nItems = 0 ; this.front = 0; this.rear = -1 ; } public boolean isFull(){ return (nItems == maxSize);//判断队列是否已满 } public boolean isEmpty(){ return (nItems == 0);//判断队列是否为空 } //插入 public void insert( int number ){ if(!isFull()){ //处理循环队列 if( rear == (maxSize -1)){ rear = -1; } arr[++rear] = number ; nItems++; }else{ System.out.println("The Queue is full!!"); } } //删除 public int remove(){ if(!isEmpty()){ //处理循环队列 if( front == maxSize ){ front = 0; } nItems--; return arr[front++]; } else { System.err.println ("The Queue is Empty!!"); return -1; } } public static void main(String [] args){ Queue queue = new Queue(5); queue.insert(22); queue.insert(33); queue.insert(44); queue.insert(55); queue.insert(66); System.out.println("-----------先删除队列中前两个数据------------"); System.out.println("Front--->Rear:"); for( int i =0 ; i < 2 ; i++ ){ System.out.print(queue.remove() + " "); } System.out.println(""); System.out.println("-----------继续使用队列------------"); System.out.println("Front--->Rear:"); queue.insert(1); queue.insert(2); while (!queue.isEmpty()){ System.out.print(queue.remove() + " "); } }}
结果如下:
阅读全文
0 0
- 数据结构之--队列(Java代码)
- 数据结构之--优先级队列(Java代码)
- java数据结构之队列
- Java 数据结构之队列
- 数据结构之链表、栈和队列 java代码实现
- 数据结构之队列的实现(JAVA)
- Java 数据结构之 Queue(队列)
- java 实现数据结构之队列
- java 实现数据结构之队列
- Java数据结构之有效队列
- Java数据结构之链式队列
- 数据结构之-java实现-队列
- 数据结构之队列【java实现】
- 数据结构之java实现队列
- 数据结构--队列(java)
- 数据结构(Java)---队列
- 数据结构(C语言版)规范代码之队列
- 数据结构 队列以及Java代码实现
- 7-13 家庭房产(25 分)
- 电路实践
- 讲给Android程序员看的前端教程(32)——继承
- 模拟实现库函数
- Python模块一
- 数据结构之--队列(Java代码)
- 栈与队列--停车场
- 测鬼记(中)之奋斗——变数
- C++类模板 template <class T>
- Android EasyPermissions官方库,高效处理权限
- MySQL 调优/优化的 100 个建议
- 撑起11.11的狂欢:京东服务器已做好准备
- 测鬼记(中)之奋斗——离去的前夜
- 剑指offer-从上往下打印出二叉树的每个节点,同层节点从左至右打印。