迴圈佇列利用順序佇列的第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。允許插入的一端稱為隊尾,允許刪除的一端稱為隊頭。線性表有順序儲存和鏈式儲存,棧是線性表,所以也有這兩種儲存方式。同樣,佇列作為一種特殊的線性表...