佇列之順序佇列詳解(C語言版)

2021-10-19 10:29:42 字數 3399 閱讀 1238

首先我們來看看什麼是佇列?佇列是一種先進先出(fifo)的線性表,它只允許在表的一端進行插入,而在另一端刪除元素。這和我們日常生活中的排隊是一致的,最早進入佇列的元素最早離開。佇列的結構圖如下所示:

明白了佇列之後,順序佇列就非常簡單了,用順序儲存結構表示的佇列就簡稱為順序佇列。和順序棧相類似,在佇列的順序儲存結構中,除了用一組位址連續的儲存單元依次存放從佇列頭到佇列尾的元素之外,尚需附設兩個指標front和rear分別指示佇列頭元素及佇列尾元素的位置。為了在c語言中描述方便起見,在此我們約定:初始化建空佇列時,令front=rear=0,每當插人新的佇列尾元素時,「尾指標增1」;每當刪除佇列頭元素時,「頭指標增1」。因此,在非空佇列中,頭指標始終指向佇列頭元素,而尾指標始終指向佇列尾元素的下乙個位置。了解了順序佇列之後,我們可以發現順序佇列有乙個很大的缺點,它會出現虛假的滿狀態,為了解決這個問題我們可以將其改造成迴圈佇列(迴圈佇列將在下次進行介紹)。

結構圖

**描述

//資料型別

#define elemtype int

//佇列可容納的最多元素個數

#define maxsize 8

//佇列的管理結構

typedef

struct queue

queue;

初始化

//初始化順序佇列

void

initqueue

(queue *q)

入隊

//入隊操作

void

enqueue

(queue *q, elemtype x)

出隊

//出隊

void

dequeue

(queue *q)

列印佇列資料

//列印順序佇列中的元素

void

showqueue

(queue *q)

printf

("\n");

}

獲取隊頭元素

//獲取隊頭元素

void

gethdad

(queue *q, elemtype *v)

求佇列長度

//獲取佇列元素個數

intlength

(queue *q)

清空佇列

//清空佇列

void

clearqueue

(queue *q)

銷毀佇列

//銷毀佇列

void

destroyqueue

(queue *q)

以下提供順序佇列的測試**seqqueue.h

#ifndef __seqqueue_h__

#define __seqqueue_h__

#include

#include

#include

//資料型別

#define elemtype int

//佇列可容納的最多元素個數

#define maxsize 8

//佇列的管理結構

typedef

struct queue

queue;

void

initqueue

(queue *q)

;void

enqueue

(queue *q, elemtype x)

;void

showqueue

(queue *q)

;void

dequeue

(queue *q)

;void

gethdad

(queue *q, elemtype *v)

;int

length

(queue *q)

;void

clearqueue

(queue *q)

;void

destroyqueue

(queue *q)

;#endif

//__seqqueue_h__

seqqueue.cpp

#include

"seqqueue.h"

//初始化順序佇列

void

initqueue

(queue *q)

//入隊操作

void

enqueue

(queue *q, elemtype x)

//列印順序佇列中的元素

void

showqueue

(queue *q)

printf

("\n");

}//出隊

void

dequeue

(queue *q)

//獲取隊頭元素

void

gethdad

(queue *q, elemtype *v)

//獲取佇列元素個數

intlength

(queue *q)

//清空佇列

void

clearqueue

(queue *q)

//銷毀佇列

void

destroyqueue

(queue *q)

main.cpp

#include

"seqqueue.h"

void

main()

showqueue

(&q)

;dequeue

(&q)

;enqueue

(&q,10)

;showqueue

(&q)

;}

佇列之迴圈佇列詳解(C語言版)

順序佇列在使用過程中容易出現虛假的滿狀態,為了解決這個問題,就產生了乙個較巧妙的方法,將順序佇列臆造為乙個環狀的空間,稱之為迴圈佇列。迴圈佇列中指標和佇列元素之間的關係不變,我們只需要利用模運算就可以很容易實現指標的迴圈移動。但是迴圈佇列中存在乙個問題,在迴圈佇列中只憑頭指標front等於尾指標re...

棧和佇列c語言版

定義 棧是限定僅在表尾進行插入和刪除操作的線性表。我們把允許插入和刪除的一端稱為棧頂 top 另一端稱為棧底 bottom 不含任何資料元素的棧稱為空棧。棧又稱為先進後出 last in first out 的線性表,簡稱lifo結構。首先他是乙個線性表,棧元素具有線性關係,即前驅後繼關係。是一種特...

資料結構之佇列 c語言版

佇列 queue 在邏輯上是一種線性儲存結構。它有以下幾個特點 1 佇列中資料是按照 先進先出 fifo,first in first out 方式進出佇列的。2 佇列只允許在 隊首 進行刪除操作,而在 隊尾 進行插入操作。佇列通常包括的兩種操作 入佇列 和 出佇列。底層可以由陣列 順序表 鍊錶實現...