資料結構 佇列和棧 Python 實現

2021-08-11 05:48:07 字數 4547 閱讀 5594

佇列和棧都是一種特殊的線性表,所以也各有順序表和煉表兩種表示方法。

佇列的python版本資料結構如下:

# -*- coding=utf-8 -*-

class

node

(object):

def__init__

(self, value, next=0):

self.value = value

self.next = next # 指標

class

queue

(object):

# 由於 python 操作位址困難,所以這裡給出了鏈佇列的資料結構

# 佇列中存在兩個指標,乙個頭指標,乙個尾指標,但是在這裡就省去了,只留了乙個尾指標

def__init__

(self):

self.head = 0

definit_queue

(self, data):

self.head = node(data[0])

p = self.head

for i in data[1:]:

p.next = node(i)

p = p.next

defclear_queue

(self):

self.head = 0

defis_empty

(self):

if self.head == 0:

return

true

else:

return

false

defget_length

(self):

p, length = self.head, 0

while p.next != 0:

length += 1

p = p.next

return length

defen_queue

(self, value):

# 向佇列的尾部中新增乙個結點

if self.is_empty():

self.head = node(value)

else:

p = self.head

for _ in xrange(self.get_length()):

p = p.next

p.next = node(value)

defget_head

(self):

# 返回佇列的隊首元素

if self.is_empty():

print

'this is an empty queue.'

return

else:

return self.head.value

defde_queue

(self):

# 刪除佇列首部的元素並返回該值

if self.is_empty():

print

'this is an empty queue.'

return

else:

p = self.head

self.head = p.next

return p.value

defshow_queue

(self):

# 列印佇列中的所有元素

if self.is_empty():

print

'this is an empty queue.'

else:

p, container = self.head,

for _ in xrange(self.get_length()):

p = p.next

print container

q = queue()

q.init_queue([1, 7, 22, 50, 111, 225])

q.show_queue()

print q.get_head()

q.en_queue(999)

q.de_queue()

print q.get_head()

q.show_queue()

q.de_queue()

q.de_queue()

q.show_queue()

棧的python版本資料結構類如下:

# -*- coding=utf-8 -*-

class

node

(object):

# 棧結點

def__init__

(self, value, next=0):

self.value = value

self.next = next # 指標

class

stack

(object):

# 由於 python 難以對記憶體位址進行操作,所以這裡給出了鏈棧的資料結構

# 由於棧的操作比線性表少很多,所以順序棧的表示法要比鏈棧方便快捷

def__init__

(self):

self.head = 0

definit_stack

(self, data):

self.head = node(data[0])

p = self.head

for i in data[1:]:

p.next = node(i)

p = p.next

defclear_stack

(self):

self.head = 0

defis_empty

(self):

if self.head == 0:

return

true

else:

return

false

defget_length

(self):

p, length = self.head, 0

while p != 0:

length += 1

p = p.next

return length

defpush

(self, value):

# 向棧中新增乙個結點

if self.is_empty():

self.head = node(value)

else:

p = self.head

for _ in xrange(self.get_length()-1):

p = p.next

p.next = node(value)

defget_top

(self):

# 獲得棧頂元素

if self.is_empty():

print

'this is an empty stack.'

return

else:

p = self.head

for _ in xrange(self.get_length()):

p = p.next

return p.value

defpop(self):

# 彈出棧頂元素

length = self.get_length()

if self.is_empty():

print

'this is an empty stack.'

return

elif length == 1:

p = self.head

self.head = 0

return p.value

elif length == 2:

p = self.head

value = p.next.value

self.head.next = 0

return value

else:

p = self.head

for _ in xrange(1, length-1):

p = p.next

pop = p.next

p.next = 0

return pop.value

defshow_stack

(self):

# 列印棧中的所有元素

if self.is_empty():

print

'this is an empty stack.'

else:

p, container = self.head,

for _ in xrange(self.get_length()-1):

p = p.next

print container

s = stack()

s.init_stack([1, 7, 22, 50, 111, 225])

s.show_stack()

print s.get_top()

s.push(999)

print s.pop()

s.show_stack()

s.pop()

s.pop()

s.show_stack()

資料結構 棧和佇列

棧 基礎 知識棧 練習題 佇列 基礎知識 棧示意圖 後進先出 順序棧結構定義 define maxsize 1024 struct stack 操作函式 push 入棧 pop 出棧 struct lstack 鏈棧示意圖 操作函式 push 入棧 pop 出棧 注意 也可以直接呼叫系統已經寫好的庫...

資料結構 棧和佇列

本章的基本內容是 兩種特殊的線性表 棧和佇列 從資料結構角度看,棧和佇列是操作受限的線性表,他們的邏輯結構相同。從抽象資料型別角度看,棧和佇列是兩種重要的抽象資料型別。p棧 限定僅在表的一端進行插入和刪除操作的線性表。p允許插入和刪除的一端稱為棧頂,另一端稱為棧底。p空棧 不含任何資料元素的棧。a ...

資料結構 棧和佇列

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。class solution int pop node stack2.top stack2.pop return node private stack stack1 stack stack2 大家都知道斐波那契數列,現...