基于python實現(xiàn)模擬數(shù)據(jù)結構模型
模擬棧
- Stack() 創(chuàng)建一個空的新棧。 它不需要參數(shù),并返回一個空棧。
- push(item)將一個新項添加到棧的頂部。它需要 item 做參數(shù)并不返回任何內容。
- pop() 從棧中刪除頂部項。它不需要參數(shù)并返回 item 。棧被修改。
- peek() 從棧返回頂部項,但不會刪除它。不需要參數(shù)。 不修改棧。
- isEmpty() 測試棧是否為空。不需要參數(shù),并返回布爾值。
- size() 返回棧中的 item 數(shù)量。不需要參數(shù),并返回一個整數(shù)。
class Stack():
def __init__(self):
self.items = []
def push(self,item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return len(self.items) - 1
def isEmpty(self):
return self.items == []
def size(self):
return len(self.items)
s = Stack()
s.push(1)
s.push(2)
s.push(3)
print(s.pop())
print(s.pop())
print(s.pop())
print(s.isEmpty())
模擬隊列
- Queue() 創(chuàng)建一個空的新隊列。 它不需要參數(shù),并返回一個空隊列。
- enqueue(item) 將新項添加到隊尾。 它需要 item 作為參數(shù),并不返回任何內容。
- dequeue() 從隊首移除項。它不需要參數(shù)并返回 item。 隊列被修改。
- isEmpty() 查看隊列是否為空。它不需要參數(shù),并返回布爾值。
- size() 返回隊列中的項數(shù)。它不需要參數(shù),并返回一個整數(shù)。
class Queue():
def __init__(self):
self.items = []
def enqueue(self,item):
self.items.insert(0,item)
def dequeue(self):
return self.items.pop()
def isEmpty(self):
return self.items == []
def size(self):
return len(self.items)
q = Queue()
q.enqueue(1)
q.enqueue(2)
q.enqueue(3)
print(q.dequeue())
print(q.dequeue())
print(q.dequeue())
案例:燙手山芋
燙手山芋游戲介紹:6個孩子圍城一個圈,排列順序孩子們自己指定。第一個孩子手里有一個燙手的山芋,需要在計時器計時1秒后將山芋傳遞給下一個孩子,依次類推。規(guī)則是,在計時器每計時7秒時,手里有山芋的孩子退出游戲。該游戲直到剩下一個孩子時結束,最后剩下的孩子獲勝。請使用隊列實現(xiàn)該游戲策略,排在第幾個位置最終會獲勝。
準則:隊頭孩子的手里永遠要有山芋。
queue = Queue()
kids = ['A','B','C','D','E','F']
#將六個孩子添加到隊列中,A是隊頭位置的孩子
for kid in kids:
queue.enqueue(kid)
while queue.size() > 1:
#在7秒之內山芋會被傳遞6次
for i in range(6):
kid = queue.dequeue()
queue.enqueue(kid)
queue.dequeue()
print('獲勝者為:',queue.dequeue())
模擬雙端隊列
同同列相比,有兩個頭部和尾部??梢栽陔p端進行數(shù)據(jù)的插入和刪除,提供了單數(shù)據(jù)結構中棧和隊列的特性
- Deque() 創(chuàng)建一個空的新deque。它不需要參數(shù),并返回空的deque。
- addFront(item) 將一個新項添加到deque的首部。它需要item參數(shù)并不返回任何內容。
- addRear(item) 將一個新項添加到deque的尾部。它需要item參數(shù)并不返回任何內容。
- removeFront() 從deque中刪除首項。它不需要參數(shù)并返回item。deque被修改。
- removeRear() 從deque中刪除尾項。它不需要參數(shù)并返回item。deque被修改。
- isEmpty() 測試deque是否為空。它不需要參數(shù),并返回布爾值。
- size() 返回deque中的項數(shù)。它不需要參數(shù),并返回一個整數(shù)。
案例:回文檢查
回文是一個字符串,讀取首尾相同的字符,例如,radar toot madam。
def isHuiWen(s):
ex = True
q = Dequeue()
# 將字符串的每一個字符添加到雙端隊列中
for ch in s:
q.addFront(ch)
for i in range(len(s) // 2):
font = q.removeFront()
rear = q.removeRear()
if font != rear:
ex = False
break
return ex
模擬鏈表
- . is_empty():鏈表是否為空
- . length():鏈表長度
- . travel():遍歷整個鏈表
- . add(item):鏈表頭部添加元素
- . append(item):鏈表尾部添加元素
- . insert(pos, item):指定位置添加元素
- . remove(item):刪除節(jié)點
- . search(item):查找節(jié)點是否存在
結點對象:
class Node():
def __init__(self,item):
self.item = item
self.next = None
鏈表對象:
class Link():
#構建出一個空的鏈表
def __init__(self):
self._head = None #永遠指向鏈表中的頭節(jié)點
#想鏈表的頭部插入節(jié)點
def add(self,item):
node = Node(item)
node.next = self._head
self._head = node
def travel(self):
cur = self._head
#鏈表為空則輸出‘鏈表為空'
if self._head == None:
print('鏈表為空!')
while cur:
print(cur.item)
cur = cur.next
def isEmpty(self):
return self._head == None
def length(self):
cur = self._head
count = 0
while cur:
count += 1
cur = cur.next
return count
def search(self,item):
cur = self._head
find = False
while cur:
if cur.item == item:
find = True
break
cur = cur.next
return find
def append(self,item):
node = Node(item)
#鏈表為空的情況
if self._head == None:
self._head = node
return
cur = self._head #頭節(jié)點
pre = None #cur的前一個節(jié)點
while cur:
pre = cur
cur = cur.next
pre.next = node
def insert(self,pos,item):
node = Node(item)
if pos < 0 or pos > self.length():
print('重新給pos賦值?。。?)
return
cur = self._head
pre = None
for i in range(pos):
pre = cur
cur = cur.next
pre.next = node
node.next = cur
def remove(self,item):
cur = self._head
pre = None
if self._head == None:#鏈表為空
print('鏈表為空,沒有可刪除的節(jié)點??!1')
return
#刪除的是第一個節(jié)點的情況
if self._head.item == item:
self._head = self._head.next
return
#刪除的是非第一個節(jié)點的情況
while cur:
pre = cur
cur = cur.next
if cur.item == item:
pre.next = cur.next
return
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Python實現(xiàn)帶參數(shù)與不帶參數(shù)的多重繼承示例
這篇文章主要介紹了Python實現(xiàn)帶參數(shù)與不帶參數(shù)的多重繼承,結合具體實例形式對比分析了Python實現(xiàn)帶參數(shù)與不帶參數(shù)的多重繼承相關操作技巧,需要的朋友可以參考下2018-01-01
基于Python中isfile函數(shù)和isdir函數(shù)使用詳解
今天小編就為大家分享一篇基于Python中isfile函數(shù)和isdir函數(shù)使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
Python HTML解析模塊HTMLParser用法分析【爬蟲工具】
這篇文章主要介紹了Python HTML解析模塊HTMLParser用法,結合實例形式分析了HTMLParser模塊功能、常用函數(shù)及作為爬蟲工具相關使用技巧,需要的朋友可以參考下2019-04-04
一個簡單的python爬蟲程序 爬取豆瓣熱度Top100以內的電影信息
這篇文章主要為大家詳細介紹了一個簡單的python爬蟲程序,爬取豆瓣熱度Top100以內的電影信息,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-04-04
深入淺析pycharm中 Make available to all projects的含義
這篇文章主要介紹了pycharm中 Make available to all projects的含義,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09

