C語言實現順序佇列

2021-09-22 16:42:16 字數 2266 閱讀 4968

有關c語言實現佇列

1.佇列也是一種運算受限制的線性表,它只允許在表的一段(front)進行插入,在另一端(rear)進行刪除。

2.佇列亦稱作先進先出的線性表,注意不能稱為後進後出。

//順序佇列結構描述

struct sq_queue

;typedef struct sq_queue sqqueue;

sqqueue q;

為方便起見,規定front指向當前對頭元素,rear指向當前隊尾所在位置的下乙個位置,所以佇列總會有乙個位置不放資料元素。

於是,一開始初始化都讓front,rear為0,若不考慮溢位,入隊的操作為

q.data[q.rear]=data;

q.rear++;//尾指標加1

若不考慮隊空,出隊的操作為,其中temp為第三者,用來當函式的返回值

temp=q.data[q.front];

q.front++;//頭指標加1

顯然此時,判斷隊滿的條件為

(q.rear)-(q.front)=max-1,此時再做入隊操作則會上溢,此情況稱為真溢位,假溢位的情況後面解決。

判斷隊空的條件為

q.front==q.rear

假溢位的原因是:如果當前尾指標等於向量的上界(即q.rear==max-1),即使佇列不滿(即當前佇列長度小於max-1),再入隊操作也會引發溢位。

如此時佇列還有兩個空位,但是再入隊(即q.rear++大於max-1)就會溢位,

產生該現象的原因是:被刪元素的空間在該元素刪除以後就永遠是用不到。

為客服這個問題,下面介紹一種方法。

即設想(注意是設想!!)向量q.data[max]是乙個首尾相接的圓環,即q.data[0]接在q.data[max-1]後面,我們稱這種意義下的向量稱為迴圈向量,並將迴圈向量中的佇列稱為迴圈佇列。再回到上面假溢位的情況,此時再做入隊操作時,令尾指標等於向量的下界,這樣就能利用已被刪除的元素空間,克服假上溢現象。

此時,入隊操作為(判斷隊滿情況下面介紹)

q.data[q.rear]=data;

q.rear=(q.rear+1)%max;

出隊操作為

temp=q.data[q.front];

q.front=(q.front+1)%max;

為什麼要用%即模運算,看回上圖,若此時再入隊,那麼q.rear=(4+1)%5=0,就入隊成功了。

判斷隊滿的條件為:(q.rear+1)%max=q.front

判斷隊空的條件為:q.front=q.rear

下面貼上**

#include

#include

#define max 5

#define ok 1

#define error -1

#define queue_size 100

typedef

int elemtype;

//順序佇列結構描述

struct sq_queue

;typedef

struct sq_queue sqqueue;

//初始化佇列

void

initsqqueue

(sqqueue &q)

//入隊函式

void

addqueue

(sqqueue &q,elemtype data)

}//出隊函式

elemtype delqueue

(sqqueue &q)

return temp;

}//列印佇列函式

void

printf_sqqueue

(sqqueue &q)

}printf

("\n");

q.front=temp;

}int

main

(int argc,

char

*ar**)

break

;case2:

break;}

}while

(temp!=3)

;printf()

;printf

("\n");

return0;

}

C語言實現,順序佇列,迴圈佇列,和棧!

佇列是一種特殊的 線性表,特殊之處在於它只允許在表的前端 front 進行刪除操作,而在表的後端 rear 進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列的資料元素又稱為佇列元素。在佇列中插入乙個佇列元素稱為入隊,從佇列中刪除乙個佇列元...

順序隊列為空的條件 C語言實現順序佇列

佇列,和棧一樣,也是一種對資料的 存 和 取 有嚴格要求的線性儲存結構。與棧結構不同的是,佇列的兩端都 開口 要求資料只能從一端進,從另一端出,如下圖示 通常,稱進資料的一端為 隊尾 出資料的一端為 隊頭 資料元素進佇列的過程稱為 入隊 出佇列的過程稱為 出隊 不僅如此,佇列中資料的進出要遵循 先進...

佇列(c語言實現)

目錄前言 一 佇列是什麼?二 佇列的屬性與操作以及種類 1.佇列屬性 2.佇列操作 3.佇列種類 三 佇列的實現 c語言 總結 本文旨在幫助剛接觸佇列的人更快的掌握,語言不夠嚴謹,望海涵。栗子 一對情侶準備在情人節去電影院看電影,男的是個身穿格仔衫的程式設計師,我們就稱之為小木,由於排隊買票的人特別...