数据结构学习笔记Day4-队列(用java实现)
一、说一下队列
1.什么是队列?
只能在一端进行插入,在另一端进行删除操作的线性表。插入的一端叫做队头,进行删除的一端叫做队尾。插入操作叫进队,删除操作称为出队。
2.队列的特点
先进先出
3.队列的存储结构
顺序队和链队
二、用java实现顺序队(数组实现)
package myStudy.dataStructure.day4;
import java.util.Arrays;
/**
*
* @description 队列(先进先出)
* @author shenrenfeng
* @date 2018年11月6日 下午8:38:23
*
*/
public class MyQueue {
private Integer[] datas;// 存放数据
private Integer head;// 队头
private Integer tail;// 队尾
private Integer length;// 数组长度,用于判断是否需要扩展数组
public MyQueue() {
datas = new Integer[10];
head = 0;
tail = 0;
length = 10;
}
/**
* 插入数据(从队尾插入)
*/
public void insert(Integer data) {
if(datas.length >= length) {
datas = Arrays.copyOf(datas, length + 10);// 每次扩展数组长度加10
length = length + 10;
}
datas[tail] = data;
tail++;
}
/**
* 删除数据(从队头删除)
* @return
*/
public Integer remove() {
if(datas[head] != null) {
Integer removeData = datas[head];
datas[head] = null;
head++;
return removeData;
}
return null;
}
/**
* 展示队列数据
*/
public void showMyQueue() {
if(head < tail) {
for(int i = head; i < tail; i++) {
System.out.print(datas[i] + ",");
}
} else {
System.out.println("空队列!");
}
}
}
测试一下:
package myStudy.dataStructure.day4;
/**
*
* @description
* @author shenrenfeng
* @date 2018年11月6日 下午9:13:11
*
*/
public class Test {
public static void main(String[] args) {
MyQueue myQueue = new MyQueue();
myQueue.insert(-1);
myQueue.insert(0);
myQueue.insert(1);
myQueue.insert(2);
myQueue.insert(3);
myQueue.insert(4);
myQueue.insert(5);
myQueue.insert(6);
myQueue.insert(7);
myQueue.insert(8);
myQueue.insert(9);
myQueue.showMyQueue();
System.out.println();
System.out.println(myQueue.remove());
System.out.println(myQueue.remove());
myQueue.showMyQueue();
}
}
测试结果: