資料結構之佇列(順序儲存),實現迴圈佇列

2021-10-02 17:39:03 字數 2260 閱讀 1143

迴圈佇列利用順序佇列的第2種出隊方式:

1.使用隊頭(front)向後移動,而不是通過將整個佇列向前移動,大大提高了出隊的效率。

2.使用迴圈佇列,解決了第2種出隊方式浪費儲存空間的問題。

3.也就是說,迴圈佇列出隊效率高,儲存空間利用率高。

空佇列:

迴圈佇列:

插入元素:

滿佇列:

方法:1.利用取模

2.判斷佇列空:sq->front==sq->rear;

3.判斷佇列滿:(sq->rear+1)%max_size==sq->front;

4.迴圈隊列入隊,隊尾迴圈後移:sq->rear=(sq->rear+1)%max_size;

5.迴圈佇列出隊,隊頭迴圈後移:sq->front=(sq->front+1)%max_size;

6.元素個數:

if(sq->rear >= sq->front) return sq->rear - sq->front;

if(sq->rear < sq->front) return sq->rear - sq->front + max_size;

//合併為:

return (sq->rear - sq->front + max_size) % max_size;

**:

//利用取模方法實現迴圈佇列

#include

#define max_size 5

using namespace std;

typedef

int datatype;

typedef

struct t

seqqueue;

intinitqueue

(seqqueue*

&sq)

//判斷佇列是否為滿,利用取餘方法實現迴圈

intisfull

(seqqueue*

&sq)

return0;

}//判斷是否為空

intisempty

(seqqueue*

&sq)

return0;

}//入隊,佇列是否為滿

intenterqueue

(seqqueue*

&sq, datatype data)

//列印

void

printqueue

(seqqueue*

&sq)

cout << endl;

}//出隊

intdeletequeue

(seqqueue*

& sq, datatype& data)

//求佇列儲存數資料,個數

intgetlength

(seqqueue*

& sq)

void

clearqueue

(seqqueue*

& sq)

intmain()

cout <<

"元素個數為:"

<<

getlength

(sq)

<< endl;

printqueue

(sq);if

(deletequeue

(sq, data)

)cout << data <<

"成功出隊"

<< endl;

cout <<

"元素個數為:"

資料結構 環形佇列 迴圈佇列 順序儲存

佇列是對頭出 隊尾入的先進先出線性表。需要兩個指標front和rear分別來指向隊頭和隊尾。front指向隊頭元素的前乙個位置,rear總是指向隊尾元素。進隊 rear 1 出隊 front 1 隊空條件 front rear 隊滿條件 rear maxsize 1 但是這樣會出現假溢位的情況,因為...

資料結構 非迴圈佇列 順序儲存

佇列是對頭出 隊尾入的先進先出線性表。需要兩個指標front和rear分別來指向隊頭和隊尾。front指向隊頭元素的前乙個位置,rear總是指向隊尾元素。進隊 rear 1 出隊 front 1 隊空條件 front rear 隊滿條件 rear maxsize 1 include include ...

資料結構 迴圈佇列的順序儲存結構

專案整體源 佇列是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。佇列是一種先進先出 first in first out 的線性表,簡稱fifo。允許插入的一端稱為隊尾,允許刪除的一端稱為隊頭。線性表有順序儲存和鏈式儲存,棧是線性表,所以也有這兩種儲存方式。同樣,佇列作為一種特殊的線性表...