學習了好長 一段時間的資料結構,由於時間關係一直沒有寫部落格。這次打算將這段時間的學習內容寫下來做個整理。
佇列作為線性結構的一種, 其實用性不用多說。這裡總結下兩種結構的佇列實現。
##迴圈佇列 ##
先列下以順序表結構形成的普通順序佇列存在的問題:
隊頭不斷刪除元素,將使佇列的頭部空出單元;
隨著刪除、插入的進行,將很快隊滿—假溢位;
這一點不象人類排隊,人類排隊時,隊頭的人走掉後,後面的人自然會往前移動,不會讓隊頭部分空出位置。
所以如果向用順序結構實現佇列,乙個解決辦法就是—迴圈順序佇列
迴圈佇列的不同之處在於其將data[0]和data[maxlen-1]視為相鄰單元,首尾相接,形成乙個邏輯意義的環(非物理上的)。1. 迴圈佇列定義
//迴圈佇列
templateclass sequeue
;
當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//判斷隊滿
由於迴圈,隊空和隊滿時都有:rear==front,如何區分出隊空和隊滿呢?–【方法一】約定保留乙個元素單元:template
bool sequeue::full()
//入隊
template
inline
void sequeue::push(t x)
}
解決方法:約定陣列最多存放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.鏈式佇列 後記在棧的學習中,我們知道棧是一種只能在一端進行操作的資料結構。而佇列,是一種可以在兩端進行操作的資料結構,是先進先出的操作順序。定義 在一端進行插入操作,在另一端進行...