數據結構(3)| 隊列

一.隊列的定義

隊列是指在表的一端進行插入操作,在另一端進行刪除操作的一種數據結構。它是一種先進先出的線性表,就如同日常生活中排隊的場景一樣,最早進入隊列的人最早離開。在隊列中,先進入的一端稱為隊頭(front),后進入的一端稱為隊尾(rear)。

二.隊列的基本操作

  • 初始化——構造一個空隊列
  • 入隊——在隊列的隊尾插入一個新元素
  • 出隊——刪除隊列的隊頭元素
  • 獲取隊頭——取隊列隊頭元素
  • 求長度——求出隊列中數據元素的個數
  • 判空——判斷當前隊列是否為空
  • 正序遍歷——依次訪問隊列中每個元素并且輸出
  • 銷毀——銷毀一個已存在的隊列

三.順序隊列

順序隊列可以用簡單的一維數組來進行表示,此外,還可以設置兩個指針front和rear分別指向隊列的頭部和尾部。

四.循環(huán)隊列

由于使用順序隊列在進行隊列的入隊、出隊操作是在兩端進行的,隨著元素的不斷插入、刪除,兩端都向后移動,隊列很快就會移動到數組的末端造成溢出,而前面的單位無法利用,就會造成資源的浪費,因此提出了循環(huán)隊列。

循環(huán)隊列的定義如下:

public class sequenceQueue<T>{
    final int maxSize = 10;
    private T queueArray[];
    private int front;
    private int rear;

    public sequenceQueue(){}  //構造一個隊列
    public void enQueue(T obj){}  //在隊列隊尾插入一個新元素
    public T deQueue(){}  //刪除隊列隊頭元素
    public T getHead(){}  //取隊頭元素
    public int size(){}  //求隊列中數據元素的個數
    public boolean isEmpty(){}  //判空
    public void nextOrder(){}  //遍歷
    public void clear(){}  //銷毀隊列
}

1.隊列的初始化

 public sequenceQueue(){
        front = rear = 0;
        queueArray = (T[]) new Object[maxSize];
    }  

2.入隊

public void enQueue(T obj){
        if((rear+1)%queueArray.length == front){
            System.out.println("error");
        }
        rear = (rear+1)%queueArray.length;
        queueArray[rear] = obj;
    }  

3.出隊

public T deQueue(){
        if(rear = front){
            System.out.println("error");
            return null;
        }
       front = (frotn+1)%queueArray.length;
        return queueArray[front];
    }  

4.取頭元素

public T getHead(){
        if(rear = front){
            System.out.println("error");
            return null;
        }
        front = (front+1)%queueArray.length;
        return queueArray[front];
    }  

5.隊列的判空

public boolean isEmpty(){
        if(rear = front){
            return true;
        }
        else{
            return false;
        }
    }  

6.隊列的長度

public int size(){
        return queueArray.length;
    }  

7.遍歷隊列

 public void nextOrder(){
        int i,j = front;
        for(i=1;i<=size;i++){
            j = (j+1)%queueArray.length;
            System.out.println(queueArray[j]);
        }
    }  

8.清空隊列

 public void clear(){
        rear = front;
    }  
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 數據結構 第7講 循環(huán)隊列 過了一段時間,小張再也受不了...
    rainchxy閱讀 9,292評論 4 16
  • 棧 棧的英文單詞是Stack,它代表一種特殊的線性表,這種線性表只能在固定一端(通常認為是線性表的尾端)進行插入,...
    Jack921閱讀 1,631評論 0 5
  • 本文主要講解了隊列的定義和隊列主要功能實現的算法。最后會列舉一些隊列在程序設計當中常見的應用實例!相信了解了隊列對...
    xiaoyouPrince閱讀 1,222評論 0 0
  • 本已成仙,你卻讓我回到人間,塵緣已了,是你讓我再續(xù)前緣,若是輪回,注定我歷經磨難,往生債未了,不還也罷,何苦,何苦...
    愿得一人懂我詩閱讀 280評論 0 4
  • 持續(xù)更新中......
    Rebaccali閱讀 447評論 1 8

友情鏈接更多精彩內容