1 队列的概述
1 从数据结构的逻辑结构来看,队列结构其实就是一种线性结构 ,从数据的存储结构来进一步划分队列
结构包括
- 顺序队列结构:即使用一组地址连续的内存单元依次保存队列中的元素。在程序中,可以定义一个指定大小的结构数据作为队列
- 链式队列结构: 即使用链表作为队列
2 队列的结构
- 在队列结构中允许对两端进行操作,但两端的操作不同,再表的一端自能进行删除操作,称为对头;在表的另一端
只能进行插入操作,称为队尾。如果队列中没有数据元素,则称为空队列 - 从数据的运算角度来分析,队列结构是按照“先进先出”的原则处理节点数据的
3 队列结构中,一般队列结构的基本操作只有两个
- 入队列:将一个元素添加到队尾
- 出队列:将对头的元素取出,同时删除该元素,使后一个元素成为对头
2 代码实现
2.1 准备工作
public class Data3 {
String name;
int age;
}
- 创建队列的数据结构
public class SQType {
static final int QUMax = 15;
Data3[] data = new Data3[QUMax];
int head;//队头
int tail;//队尾
}
2.2 初始化队列
//初始化队
SQType SQTypeInit() {
SQType q;
if ((q = new SQType()) != null) {
q.head = 0;
q.tail = 0;
return q;
} else {
return null;
}
}
2.3 判断队列是否为空
//判断队列是否为空
int SQTypeIsEmpty(SQType s) {
if (s.tail == s.head) {
return 1;//为空返回 1
} else {
return 0;//不为空返回值 0
}
}
2.4 判断队列是否已满
//判断队列是否已满
int SQTypeIsFully(SQType s) {
if (s.head == QUMax) {
return 1;
} else {
return 0;
}
}
2.5 清空队列中的信息
//清空队列中的信息
void SQTypeClear(SQType q){
q.head = 0;
q.tail = 0;
}
2.6 释放资源空间
//释放空间
void SQTypeFree(SQType q){
if (q != null){
q = null;
}
}
2.7 入队列
//入队,从队尾开始
int InSQType(SQType q,Data3 data){
if (q.tail == QUMax){
System.out.println("队列已满,操作失败!");
return 0;
}else {
q.data[q.tail++] = data;
return 1;
}
}
2.8 出队列
//出队,从头开始
Data3 OutSQType(SQType q){
if (q.tail == q.head){
System.out.println("此队列为空,操作失败");
System.exit(0);
}else {
return q.data[q.head++];
}
return null;
}
2.9 读取队列中的数据
//读取节点中的数据信息
Data3 PeekSQType(SQType q){
if (SQTypeIsEmpty(q) == 1){
System.out.println("空队列!");
return null;
}else {
return q.data[q.head];
}
}
2.10 计算队列的长度
//计算队列的长度
int SQTypeLen(SQType q){
int temp;
temp = q.tail-q.head;
return temp;
}
3测试代码
public class MyTest {
public static void main(String[] args) {
SQType st = new SQType();
Data3 data3;
Scanner sc = new Scanner(System.in);
//初始化
SQType stack = st.SQTypeInit();
System.out.println("入队列操作:");
System.out.println("请输入姓名,年龄进行入队操作");
do {
Data3 data = new Data3();
data.name = sc.next();
data.age = sc.nextInt();
if (data.name.equals("0")){
break;
}else {
st.InSQType(stack,data);
}
}while (true);
String temp = "1";
System.out.println("出队操作,按任意非0键进行出栈操作");
temp = sc.next();
while (!temp.equals("0")){
data3 = st.OutSQType(stack);
System.out.println("出队列的数据是:("+data3.name+":"+data3.age+")");
temp = sc.next();
}
System.out.println("测试结束!");
st.SQTypeFree(stack);
}
}
测试结果: