1. 程式人生 > >軟考——佇列與雙端對列

軟考——佇列與雙端對列

        這兩天做題的時候遇到了雙端對列的題,和大家分享一下。

一、佇列和棧

        佇列和棧我們都不陌生,學過資料結構的同學應該都知道在順序結構中有這麼兩中存放資料的容器。

        佇列:在佇列中,資料的進出方法是先進先出的,就像是一個管道一樣,順流而下,一灌到底,出口和入口不同。

       

      棧:在棧中資料進出的順序是先進後出,就像一個桶一樣,對於資料的儲存為填塞式,並且出口和入口是一個。

        如圖為兩種資料儲存結構的形象表示方法,這裡面對於資料的進出方式的不同時他們的最大的不同之處,在這裡還有一點要注意的是利用棧的這種特性可以使資料的排列順序發生改變,如1,2,3,4,5,6 這幾個數,我們在這裡按序入列,無論如何都是一樣的輸出,而入棧就不同了,比如1,2先入棧 ,然後出棧就成了2,1,之後的如3入棧之後立刻出棧結果就是2,1,3,這個裡面就有了一個問題,就是利用棧可以進行資料位置的調換,這個特點還可以用於對於遞迴呼叫的地址儲存等作用。

        上面兩種儲存結構各有各的好處,現在又有一種新的儲存方式,就是雙端佇列,它集合了兩種結構的優缺點。

二、雙端佇列

        雙端佇列顧名思義,他有兩個端,什麼端呢,一般的佇列也是有兩個端,一個輸入,一個輸出。雙端佇列也有連個端,但是這兩個端是輸入輸出均可的:

        這個佇列有的好處很多,首先他每個段都可以出也可以如,如果只是用一個端出另一個端入,那麼他的作用就和佇列是一樣的,如果是隻用一個端輸入輸出,那麼他又和棧的作用是一樣的。

        這裡呢,我們要理解雙端佇列的使用方法決定了裡面資料的排列順序以及輸出順序。

我們遇到的問題是一個只能從一端輸出的雙端佇列,如下圖,一個雙端佇列,其中有e1,e2,e3,e4依次進入輸出受限的雙端佇列,則得不到輸出的序列是:

A. e4、e3、e2、e1       B. e4、e2、e1、e3    C. e4、e3、e1、e2    D. e4、e2、e3、e1


        首先我們但看左面,就是一個棧的模式,所以棧的輸入輸出形式這個肯定有,其次再看左面輸出,右面輸入,佇列的模式也有,只是進入的方式有限制,所以我們來看選項,首先A就是把整個都倒序了,所以是棧的形式,正確。其次是C,e4e3是倒序,e1e2是正序,所以也是對的,因為是從兩個地方進入佇列的。看D和B選項,可能沒有什麼頭緒,這個時候就要發揮想象了,首先他們的差別就是e1e3的位置不同,然後在這裡我們的順序是從1到4排列的,然而輸出又是從左面開始的,我們可以想象,前面的進入順序是e1從右入,e2從左入,e3再從右入,e4最後從左入才可以得到e4e2的順序,所以顯然選項D是錯誤的。

        這裡我們要牢記佇列和棧的性質,結合選項的提示,就可以輕易的做出這樣的題了。