队列是一种线性表,它只允许在该表中的一端插入,在另一端删除。
允许插入的一端叫做队尾(rear),允许删除的一端叫做队头(front);
下面用Java的数组进行模拟队列的操作:
/**2015-07-26 18:49:08
*用数组元素来演示队列的内部操作
*@author lihaiming
*Email:[email protected]
*/
import java.util.Scanner;
public class Queue {
//属性变量
private int[] a;
private int head=0,tail=0;
/**
* 无参构造方法
* 默认数组长度为4;
*/
public Queue(){
a = new int[4];
}
/**
* 有参构造方法
* @param m 数组的长度
*/
public Queue(int m){
a = new int[m];
}
/**
* 把元素放到队列的方法
* @param i 元素值
*/
public void push(int i){
a[++tail]=i;
}
/**
* 从队列取出元素方法
*/
public void pop(){
head++;
}
/**
* 将队列元素依次输出方法
*/
public void display(){
for(int i=head+1;i<=tail;i++){
System.out.println(a[i]);
}
}
/**
* 返回队列的元素个数
* @return
*/
public int Size(){
return tail-head;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
System.out.println("请输入数组的长度:");
int m = input.nextInt();
Queue q = new Queue(m);
System.out.println("请依次输入队列的元素:");
System.out.println("请按-1结束");
int c;
while((c=input.nextInt())!=-1){
q.push(c);
}
System.out.println("依次进入队列的顺序:");
q.display();
System.out.print("队列里有:");
System.out.println(q.Size()+"个元素");
System.out.println("依次取出的顺序:");
while(q.head != q.tail){
System.out.println(q.a[q.head+1]);
q.head++;
}
}
}
程序结果:
请输入数组的长度:
6
请依次输入队列的元素:
请按-1结束
1
4
3
6
-1
依次进入队列的顺序:
1
4
3
6
队列里有:4个元素
依次取出的顺序:
1
4
3
6
首先确定一个数组的长度,这里我先确定一个长度6,依次添加数值1、4、3、6;
-1输入结束符号
取出的数值顺序是依然是1、4、3、6
队列是先进先出;