佇列及實現 迴圈佇列實現

2021-06-05 00:58:20 字數 3145 閱讀 7991

一、佇列

佇列是一種特殊的線性表,它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列中沒有元素時,稱為空佇列。

在佇列這種資料結構中,最先插入的元素將是最先被刪除的元素;反之最後插入的元素將最後被刪除的元素,因此佇列又稱為「先進先出」(fifo—first in first out)的線性表。  

二、操作和實現

1、結構體定義

2、初始化

3、判斷是否為空

4、取得佇列的首節點值

5、入佇列操作

6、出佇列操作

7、列印佇列的內容

1、結構體定義

[cpp]view plain

copy

print?

#define length 100

typedef

char

datatype;  

typedef

struct

queuesequence_queue;  

2、初始化

[cpp]view plain

copy

print?

#include"queue.h"

void

init_sequence_queue(sequence_queue *sq)  

3、判斷是否為空

[cpp]view plain

copy

print?

#include"queue.h"

void

is_empty_sequence_queue(sequence_queue *sq)  

4、取得佇列的首節點值

[cpp]view plain

copy

print?

#include"queue.h"

datatype get_head(seqence_queue *sq)  

return

sq->data[sq->front];   

}  

5、入佇列操作

[cpp]view plain

copy

print?

#include"queue.h"

void

insert_sequence_queue(sequence_queue *sq,datatype data)  

sq->data[sq->rear] = data;  

sq->rear++;  

}  

6、出佇列操作

[cpp]view plain

copy

print?

#include"queue.h"

datatype delete_sequence_queue(sequence_queue *sq)     

sq->front++;  

return

sq->data[sq->front-1];  

}  

7、列印佇列的內容

[cpp]view plain

copy

print?

#include"queue.h"

void

display_sequence_queue(sequence_queue *sq)     

inti ;  

for(i = sq->front;irear;i++)  

}  

三、迴圈佇列

由於佇列有元素出列,front就向後移動,所以佇列前面的空間就空了出來。為了更合理的利用空間,人們想了乙個辦法:將佇列的首尾相連接。這樣當rear移動到length時,會再從0開始迴圈。那當什麼時候佇列滿呢?當rear等於front的時候。可是隊列為空的時候也是同樣的條件,那不就沒法判斷了嗎?又有人提出了這樣的想法:犧牲乙個儲存空間,front前面不存資料,當rear在front前面的時候就是滿了,如圖:

當rear在front之前時,佇列中剩餘乙個空間,有 length - 1個元素,所以rear也為length - 1。這時就算是佇列滿了。於是

滿的判斷條件應為:(rear+1)%length == front 。

空的判斷條件為 rear == front。

所以一些操作有些變化:

5、入佇列操作

[cpp]view plain

copy

print?

#include"queue.h"

void

insert_sequence_queue(sequence_queue *sq,datatype data)  

sq->data[sq->rear] = data;  

sq->rear= (sq->rear+1)%length;  

}  

6、出佇列操作

[cpp]view plain

copy

print?

#include"queue.h"

datatype delete_sequence_queue(sequence_queue *sq)    

if(sq->front+1 == length)          

sq->front++;  

return

sq->data[sq->front-1];  

}  

7、列印佇列的內容

[cpp]view plain

copy

print?

#include"queue.h"

void

display_sequence_queue(sequence_queue *sq)     

inti ;  

for(i=sq->front;i!=sq->rear;)  

}  

佇列實現 迴圈佇列 鏈式佇列

佇列 queue 是一種類似棧的資料結構,棧是 後進先出 而佇列是 先進先出 佇列通常模擬進出一致的資料處理場景,例如訊息推送處理,中的購物處理等.迴圈佇列預備知識 鏈式佇列預備知識 include include define error 0 define ok 1 define true 1 d...

實現迴圈佇列

利用陣列實現迴圈佇列,head tail並不能判斷佇列空與滿,需要另外加上乙個輔助 include include includeusing namespace std typedef struct node node define len 20 typedef int elemtype class...

迴圈佇列實現

迴圈佇列就是當資料寫到結尾後,在回到開頭接著寫,該過程類似迴圈鍊錶。如何實現這個到結尾後又轉到開頭呢?很簡單,取模操作!上兩個圖是迴圈佇列的兩種狀態,以下所寫的所有函式都可以對照著這兩幅圖來看。如下 filename buffer.h ifndef buffer h define buffer h ...