LeetCode迴圈佇列的實現

2021-09-05 10:44:19 字數 3015 閱讀 2779

寫了好久終於把邏輯理順了,刪刪減減的注釋沒寫多少。不過作為新手還是很欣慰

class

mycircularqueue

(object):

# 設定定義傳進來的引數k,也就是佇列最大值,然後頭指標,尾指標,建立乙個內部都為空且最大為k+1的列表

def__init__

(self, k)

: self.queue =

[none

]* k # 空列表

self.maxsize = k +

1# 最大值

self.head =

0# 頭指標

self.tial =

0# 尾指標

self.tag =

0# 新增識別符號,判斷佇列空滿狀態

defenqueue

(self, value)

:# 判斷列表空滿狀態,不滿就進行插入,並讓頭指標為0,尾指標向下移動一位

if(self.isfull()==

-1):

# print('列表滿')

self.tag =

1return

if(self.isempty()==

true):

# print('列表為空')

self.queue[self.tial]

= value

self.tial =

(self.tial +1)

% self.maxsize

self.tag =

1return

self.queue[self.tial]

= value

self.tial =

(self.tial +1)

% self.maxsize

self.tag =

1def

dequeue

(self)

:# 判斷列表是否為空

if(self.isempty()==

true):

print

('隊列為空,無法判定!'

) self.tag =

0return

data = self.queue[self.head]

# 保留的火種,可能有用

self.queue[self.head]

=none

self.head =

(self.head +1)

% self.maxsize

if self.head == self.tial:

self.tag =

0return

deffront

(self)

:# 判斷列表是否為空

if(self.isempty()==

true):

print

('隊列為空,沒法取出來!'

) self.tag =

0return-1

else

: data = self.queue[self.head]

self.queue[self.head]

=none

self.head =

(self.head +1)

% self.maxsize

self.tag =

1if self.head != self.tial:

return data

else

: self.tag =

0return

'佇列空'

defrear

(self)

:# 判斷列表是否為空

if(self.isfull()==

0):print

('隊列為空,沒法取出來!'

)return-1

else

: data = self.queue[self.tial -1]

self.queue[self.tial -1]

=none

self.tial =

(self.tial -1)

% self.maxsize

return data

defisfull

(self):if

(self.tag ==1)

and(

(self.tial +1)

% self.maxsize == self.head)

:# print('隊列為滿')

return-1

else

:# print('佇列非滿')

return

1def

isempty

(self):if

(self.tag ==0)

and(self.tial == self.head)

:return

true

obj = mycircularqueue(4)

# param_1 = obj.enqueue(1)

for i in

range(4

):obj.enqueue(i)

print

(obj.queue)

# param_2 = obj.dequeue()

for i in

range(4

):obj.dequeue(

)print

(obj.queue)

# param_3 = obj.front()

print

(obj.front())

# param_4 = obj.rear()

print

(obj.rear())

# param_5 = obj.isempty()

# print(obj.isempty())

# param_6 = obj.isfull()

# print(obj.isfull())

佇列 迴圈佇列的實現

為了可以重新利用佇列底層陣列中已刪除元素所佔的空間,消除可能出現的 假滿 現象,將順序佇列改進為迴圈佇列。迴圈佇列是首尾相連的佇列 當front rear變數達到底層陣列的capacity 1之後,再向前以為就變成0.入隊 1 判斷佇列是否已滿,已滿丟擲越界異常 2 不滿的話把元素查到隊尾,並且re...

迴圈佇列的實現

佇列是一種先進先出的線性表,具有線性表的特性 分為鏈式佇列與順序佇列 順序佇列 用一段位址連續的儲存單元儲存資料元素,定義兩個游標 指向隊頭 的游標 front 指向隊尾的游標 rear 如果front rear隊列為空,如果 rear 1 maxsize front佇列滿 此為迴圈佇列 如普通佇列...

迴圈佇列的實現

include include includeusing namespace std typedef int qelementtype typedef int status define error 0 define ok 1 define maxqsize 10 佇列的資料抽象 typedef s...