資料結構與演算法(8) 線性佇列

2021-04-09 06:28:03 字數 1465 閱讀 7621

資料結構與演算法(8)—線性佇列

(mi6236)

1、順序佇列

1.1、佇列的定義

佇列(queuq)簡稱隊,它也是一種運算受限的線形表,其限制是僅允許在表的一端進行插入,而在表的另一端進行刪除。我們把進行插入的一端稱為隊尾(rear),進行刪除的一端稱為隊首(front)。向佇列中插入新元素稱作進隊或入隊,新元素進隊後就成為新的隊尾元素;從佇列中刪除元素稱為出隊,出隊後,其後繼元素成為隊首元素。由於佇列的插入和刪除分別在兩端進行,所以要刪除的元素將是佇列中最先進入的元素,因此以把佇列稱作先進先出(first in first out,簡稱fifo)表。

在日常生活中,人們為購物或等車時所排的隊就是乙個佇列,新來購物或等車的人接到隊尾(即進隊),站在隊首的人購物或上車後離去(即出隊),當最後一人購物或上車後,則隊為空。

1.2、佇列的順序儲存結構

順序儲存結構採用一維陣列(向量)實現,設佇列頭指標front和佇列尾指標rear,並且假設front指向隊頭元素的前乙個位置,rear指向隊尾元素。若不考慮滿,則入隊操作語句為q[rear++]=x;若不考慮隊空,則出隊操作語句為x=q[front].當然,出隊時,並不一定需要隊頭元素。按上述的做法,有可能出現假溢位,即隊尾已到達一維陣列的高階,不能再入隊,但因為連續出隊,佇列中元素個數並未達到最大值。解決這種問題,可用迴圈佇列。在迴圈佇列中,需要區分隊空和隊滿:仍用front=rear表示隊空,在犧牲乙個單元的前提下,用front=(rear+1)%max表示佇列滿。在這種約定下,入隊操作的語句為rear=(rear+1)%max,q[rear++]=x,出隊操作語句為:front=(front+1)%max,x=q[++front].

1.3、順序佇列基本函式演算法描述

注:以下程式在vc6.0+win98下測試通過。

#include

#define queuesize 20/*佇列的容量*/

typedef int elemtype;

typedef struct squeuesqueue;

/*初始化佇列*/

void initqueue(squeue *sq)

/*判斷佇列是不否為空*/

int queueempty(squeue sq)

/*入隊*/

int inqueue(squeue *sq,elemtype e)

else

}

/*出隊*/

outqueue(squeue *sq,elemtype *e)

else

}

/*取隊首元素*/

int getqueue(squeue sq,elemtype *e)

else

}

/*清空佇列*/

void clearqueue(squeue *sq)

/*顯示佇列中的元素*/

void showqueue(squeue sq)

}

int main()

資料結構 線性佇列

description 佇列的順序儲存方式的練習 主要是關於佇列的基本的操作 包括初始化佇列 判空佇列 入隊 出對 讀對頭元素以及讀隊中的所有的元素 本次練習採用的是 隊尾指標指向隊尾元素的下乙個位置 author qichaoqun date 2019 08 09 include stdio.h ...

線性資料結構 佇列

上次說了,一頭進一頭出的就是棧,那麼什麼是佇列 queue 呢,就是一頭進另一頭出。正如我們排隊一樣,來了人只能站在隊尾,先走的人只能是隊頭。在佇列中,總是遵循fifo,fist in first out。這個就不再這裡過多敘述了,通常採用連續的資料空間儲存佇列中的元素,就像這樣子 其中front表...

演算法與資料結構 二 線性結構之佇列

陣列,棧,佇列都是順序儲存 佇列遵循新進新出的原則,就像排隊辦理業務,先排隊的先辦理 實現 他的為空及取資料方法與stack類似 package com.company author shuoshi.yan package com.company classname description date...