資料結構與演算法 佇列

2021-07-25 14:15:29 字數 2587 閱讀 5870

學習了好長 一段時間的資料結構,由於時間關係一直沒有寫部落格。這次打算將這段時間的學習內容寫下來做個整理。
佇列作為線性結構的一種, 其實用性不用多說。這裡總結下兩種結構的佇列實現。

##迴圈佇列 ##

先列下以順序表結構形成的普通順序佇列存在的問題:

隊頭不斷刪除元素,將使佇列的頭部空出單元;

隨著刪除、插入的進行,將很快隊滿—假溢位;

這一點不象人類排隊,人類排隊時,隊頭的人走掉後,後面的人自然會往前移動,不會讓隊頭部分空出位置。

所以如果向用順序結構實現佇列,乙個解決辦法就是—迴圈順序佇列

1. 迴圈佇列定義

//迴圈佇列

templateclass sequeue

;

迴圈佇列的不同之處在於其將data[0]和data[maxlen-1]視為相鄰單元,首尾相接,形成乙個邏輯意義的環(非物理上的)。

當rear=maxlen-1時,再插入乙個元素,讓rear=0;同樣,front=maxlen-1時,再刪除乙個元素,也讓front=0;形成邏輯上的迴圈。

- 入隊(插入)操作位置計算

正常操作:rear++; data[rear]=x; 迴圈佇列中,當rear=maxlen-1時,再進行插入,此時要回到rear=0, 而不能是rear+1=maxlen,如何實現呢?

用取模運算rear=(rear+1) % maxle//判斷隊滿

template

bool sequeue::full()

//入隊

template

inline

void sequeue::push(t x)

}

由於迴圈,隊空和隊滿時都有:rear==front,如何區分出隊空和隊滿呢?–【方法一】約定保留乙個元素單元:

解決方法:約定陣列最多存放maxlen-1個元素,front指隊頭元素的前乙個單元;

因此,在有資料元素時,front和rear至少相差乙個單元,使得頭指標front永遠「趕不上」尾指標rear判定條件:

佇列空:front==rear

佇列滿:front==(rear+1) % maxlen

完整**如下:

//迴圈佇列

template

class sequeue

;template

sequeue::sequeue()

template

sequeue::~sequeue()

//判斷隊滿

template

bool sequeue::full()

//取隊頭元素

template

t sequeue::front()

else

return data[(front+1) % maxlen]; //front指向的下乙個單元才是隊頭元素

}//入隊

template

inline

void sequeue::push(t x)

}//出隊

template

void sequeue::pop()

}//統計佇列元素個數

template

int sequeue::size()

鏈佇列的實現較為簡單,這裡不做過多描述

這裡總結下用不帶頭結點的鍊錶實現的鏈佇列

不帶頭結點的鏈佇列實現

//定義結點

template

class node

;//定義鏈佇列

template

class linkedqueue

; //構建函式

template

linkedqueue::linkedqueue()

//析構函式

template

linkedqueue::~linkedqueue()

//判斷隊空

template

bool linkedqueue::empty()

//取隊頭元素

template

t linkedqueue::front()

//入隊

template

void linkedqueue::push(t x)

else front = rear = p; //當隊頭元素為空時,p成為第乙個佇列結點

}//出隊

template

bool linkedqueue::pop()

//統計佇列元素個數

template

int linkedqueue::size()

return tot;

}template

void linkedqueue::init()//初始化

if(front!=null)

return;

}

資料結構與演算法 佇列

佇列 佇列與棧不同,它是一種先進先出的結構 實現 1 陣列 2 鍊錶 記錄的資料 1 隊首位置 第乙個元素的位置 2 隊尾位置 最後乙個元素的位置 3 佇列大小 size 佇列操作 entryqueue 入隊 exitqueue 出隊 isqueueempty 隊列為空 isqueuefull 佇列...

演算法與資料結構 佇列

adt queue d d 資料關係 r r a i d,i 2,3,n r 約定a 1a 1 a1 端為隊首,a na n an 端為隊尾。基本操作 create 建立乙個空佇列 emptyque 若隊列為空,則返回true,否則返回false insertque x 向隊尾插入元素x delet...

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

引言 在上次複習棧的基本操作後,這一次我們來複習佇列的相關知識與操作。至此 我們開始資料結構佇列的學習。2.迴圈佇列 3.鏈式佇列 後記在棧的學習中,我們知道棧是一種只能在一端進行操作的資料結構。而佇列,是一種可以在兩端進行操作的資料結構,是先進先出的操作順序。定義 在一端進行插入操作,在另一端進行...