1.队列
队列是先进先出的线性表。只允许在表的一端进行插入操作,而在另一端进行删除操作。
进行插入的一端称为队尾,进行删除操作的一端称为队头。
在具体应用中通常用链表或者数组来实现。

2.从数据存储结构来划分,队列可以分为两类:
- 顺序栈结构:即使用一组地址连续的内存单元依次保存队列中的数据。在程序中,可以定义一个指定大小的结构数组来作为队列。
- 链式栈结构,即使用链表形式保存队列中各元素的值。
3.对队列的操作
本次操作我们考虑的是顺序队列结构的操作。我们把队列想像成一个数组,每次插入插入在数组的最后一位,取从第一位来取。
队列主要的操作有以下几个:
(1)入队:将一个元素添加到队尾(相当于到队列最后排队等候);
(2)出队:将队头的元素取出,同时删除该元素,使后一个元素成队头;
(3)判断队列是否为空。
package cn.kimtian.array.queue;
/**
* 队列的操作
*
* @author kimtian
*/
public class MyQueue {
/**
* 队列的底层我们可以使用数组来存储数据
*/
int[] elements;
public MyQueue() {
elements = new int[0];
}
/**
* 入队操作
*
* @param element 入队元素
*/
public void addQueue(int element) {
// 创建一个新的数组
int[] newArr = new int[elements.length + 1];
// 把原数组中的元素复制到新的数组中
for (int i = 0; i < elements.length; i++) {
newArr[i] = elements[i];
}
// 把添加的元素放入新数组中
newArr[elements.length] = element;
// 使用新数组替换老数组
elements = newArr;
}
/**
* 出队操作
*/
public int pollQueue() {
// 队列是空的
if (elements.length == 0) {
throw new RuntimeException("queue is empty!");
}
// 把数组的0的位置的元素取出来
int element = elements[0];
// 创建一个新的数组
int[] newArr = new int[elements.length - 1];
// 把原数组中的元素复制到新的数组中
for (int i = 1; i < elements.length; i++) {
newArr[i - 1] = elements[i];
}
// 使用新数组替换老数组
elements = newArr;
return element;
}
/**
* 判断队列是否为空
*/
public boolean isQueueEmpty() {
return elements.length == 0;
}
}
本文介绍了队列这一先进先出的线性数据结构,详细阐述了队列的定义、存储结构(顺序栈和链式栈)以及相关操作,包括入队、出队和判断队列是否为空。
2757

被折叠的 条评论
为什么被折叠?



