隊列結構
- 順序隊列結構 即使用一組地址連續的內存單元依次保存隊列中的數據。在程序中,可以定義一個指定大小的結構數組作爲隊列。
- 鏈式隊列結構 即使用鏈表形式保存隊列中各元素的值。
從數據運算角度來分析,隊列結構是按照“先進先出的原則處理結點的數據”。
基礎數據
public class DATA4 {
private String name;
private int age;
//
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
隊列操作
public class SQType {
static final int QUEUELEN = 15;
DATA4[] data = new DATA4[QUEUELEN]; // 隊列數組
int head; //對頭
int tail; //對尾
// 初始化隊列結構
/**
* 1 按符號常量QUEUELEN 指定的大小申請一片內存空間,用來保存隊列中的數據。
* 2 設置head=0和tail=0,表示一個空棧。
*/
SQType SQTypeInit(){
SQType q;
if((q = new SQType())!=null){
q.head = 0;
q.tail = 0;
return q;
}else {
return null;
}
}
// 判斷空隊列
/**
* 判斷空隊列即判斷一個隊列是否爲空。如果是空隊列,則表示該隊列結構中沒有數據。
* 此時可以進行入隊列操作。但不可以進行出隊列操作。
*/
int SQTypeIsEmpty(SQType q){
int temp = 0;
if(q.head == q.tail){
temp = 1;
}
return (temp);
}
// 判斷滿隊列
/**
* 判斷滿隊列即判斷一個隊列結構是否爲滿。如果是滿隊列,則表示該隊列結構中沒有多餘的空間來保存數據。
* 此時不可以進行入隊操作,但是可以進行出隊列操作。
*/
int SQTypeIsFull(SQType q){
int temp = 0;
if(q.tail == QUEUELEN){
temp = 1;
}
return temp;
}
// 清空隊列
/**
* 清空隊列中的所有數據。
*/
void SQTypeClear(SQType q){
q.head = 0; // 設置對頭
q.tail = 0;// 設置隊尾
}
// 釋放空間
/**
* 釋放隊列結構所佔據的內存單元。
*/
void SQTypeFree(SQType q){
if(q!=null){
q=null;
}
}
// 入隊列
/**
* 1 首先判斷隊列頂tail ,如果tail等於QUEUELEN ,則表示溢出,進行出錯處理;負責執行以下操作。
* 2 設置tail = tail+1
* 3 將入隊元素保存到tail指向的位置。
*/
int InSQType(SQType q,DATA4 data){
if(q.tail == QUEUELEN){
System.out.printf("隊列已滿!操作失敗");
return 0;
}else {
q.data[q.tail++] = data;
return 1;
}
}
// 出隊列操作
/**
* 1 判斷隊列head,如果head等於tail,則表示爲空隊列,進行出錯處理;否則執行下面操作。
* 2 從隊列首部取出對頭元素。
* 3 設修改隊頭head的序號。使其指向後一個元素。
*/
DATA4 OutSQType(SQType q){
if(q.head == q.tail){
System.out.printf("隊列已空!操作失敗");
}else {
return q.data[q.head++];
}
return null;
}
// 讀結點操作
/**
* 讀取頭結點數據 不刪除
*/
DATA4 PeekSQType(SQType q){
if(this.SQTypeIsEmpty(q)==1){
System.out.printf("空隊列!");
return null;
}else {
return q.data[q.head];
}
}
// 計算隊列長度
/**
* 統計隊列中結點的個數。隊尾序號減去對頭序號
*/
int SQTypeLen(SQType q){
int temp;
temp = q.tail - q.head;
return temp;
}
//
}