有關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語言 總結 本文旨在幫助剛接觸佇列的人更快的掌握,語言不夠嚴謹,望海涵。栗子 一對情侶準備在情人節去電影院看電影,男的是個身穿格仔衫的程式設計師,我們就稱之為小木,由於排隊買票的人特別...