数据结构与算法学习第一天
队列:是一种常用的线性数据结构,是一种特殊的线性表,对它的插入和删除操作限定在表的两端进行,只能从队尾插入,从队头删除,遵循先进先出原则。
队列的基本操作:
1、initialize:队列的初始化操作。
2、Count:返回队列的长度。
3、isEmpty:判断队列是否为空。
4、isFull:判断队列的状态是否已满,即初始化时预分配的空间是否已经占满。
5、addQueue:入队。将新的数据元素加入到队尾,成为新的队尾元素。入队前需要判断队列是否已满。如果队列未满,则接收新元素插入到队尾,如果队列已满,则产生上溢错误,或者未队列分配更大的空间,然后接收新元素入队。
6、DeQueue:出队。该操作从队头处取出数据元素,下一个元素成为新的队头。进行出队操作之前,必须判断队列是否为空,为空则产生下溢错误。
7、Peek:获取队头元素,但不移除该元素。
下面是代码部分:通过Java使用数组实现。
import java.util.Scanner;
public class arrayQueueDemo {
public static void main(String[] args) {
//测试
//创建一个队列
arrayQueue arrayQueue1 = new arrayQueue(3);
char key = ' ';
Scanner scanner = new Scanner(System.in);
boolean loop = true;
while(loop) {
System.out.println("s:显示队列数据");
System.out.println("e:退出程序");
System.out.println("a:添加数据到队列");
System.out.println("g:从队列取出数据");
System.out.println("h:查看队列头的数据");
key = scanner.next().charAt(0);
switch(key) {
case 's':
arrayQueue1.showQueue();
break;
case 'e':
return;
case 'a':
System.out.println("请输入一个值:");
int value = scanner.nextInt();
arrayQueue1.addQueue(value);
break;
case 'g':
try {
System.out.printf("队头的值为:%d\n",arrayQueue1.getQueue());
}catch(Exception e){
System.out.println(e.getMessage());
}
break;
case 'h':
System.out.println("队头如下:");
arrayQueue1.headQueue();
break;
default:
break;
}
}
scanner.close();
}
}
class arrayQueue{
private int rear; //指向队列尾
private int front; //指向队列头
private int maxSize;
private int[] data;
//创建队列的构造方法
public arrayQueue(int arrMaxSize) {
maxSize = arrMaxSize;
data = new int[maxSize];
rear = -1;
front = -1;
}
//判断队列是否已满
public boolean isFull() {
return rear == maxSize - 1;
}
//判断队列是否为空
public boolean isEmpty(){
return rear == front;
}
//入队列
public void addQueue(int intData) {
if(this.isFull()) {
System.out.println("The queue is full!!");
return;
}
rear++;
data[rear] = intData;
}
//出队列
public int getQueue() {
if(this.isEmpty()) {
throw new RuntimeException("队列空,不能取数据");
}
front++;
return data[front];
}
//显示队列的数据
public void showQueue() {
if(this.isEmpty()) {
System.out.println("这是个空队列!");
return;
}
System.out.println("队列如下:");
for(int i=front+1;i<rear+1;i++) {
System.out.printf("%d\t",data[i]);
}
System.out.println();
}
//显示队头
public int headQueue() {
if(this.isEmpty()) {
throw new RuntimeException("队列为空,没有数据!");
}
return data[front+1];
}
}