參考部落格:**演算法和資料結構: 一 棧和佇列
python資料結構——棧、佇列的實現(一)
python資料結構——棧、佇列的實現(二)
python資料結構——鍊錶的實現
資料結構
定義:簡單來說,資料結構就是設計資料以何種方式組織並儲存在計算機中。比如:列表、集合與字典等都是一種資料結構。
ps:「程式=資料結構+演算法」
列表:在其他程式語言中稱為「陣列」,是一種基本的資料結構型別。
關於:列表的儲存問題!
棧:棧(stack)是乙個資料集合,可以理解為只能在一端進行插入或刪除操作的列表。
棧的特點:後進先出(last-in, first-out)
棧的概念:
棧頂棧底
棧的基本操作:
進棧(壓棧):push
出棧:pop
取棧頂:gettop
利用python簡單實現棧操作
class stack(object):棧的應用——括號匹配問題def __init__(self):
self.stack=
def isempty(self):
return self.stack==
def push(self,item):
def pop(self):
if self.isempty():
raise indexerror,'pop from empty stack'
return self.stack.pop()
def peek(self):
return self.stack[-1]
def size(self):
return len(self.stack)
括號匹配問題:給乙個字串,其中包含小括號、中括號、大括號,求該字串中的括號是否匹配。
例如:()(){} 匹配
() 匹配
( 不匹配
[(]) 不匹配
def kuohaopipei(exp=""):佇列佇列(queue)是乙個資料集合,僅允許在列表的一端進行插入,另一端進行刪除。stack =
for i in exp:
if i in :
if i == ')':
if len(stack)>0 and stack[-1] == '(':
stack.pop()
else:
return false
if i == ']':
if len(stack)>0 and stack[-1] == '[':
stack.pop()
else:
return false
if i == '}':
if len(stack)>0 and stack[-1] == '))]}"))
進行插入的一端稱為隊尾(rear),插入動作稱為進隊或入隊
進行刪除的一端稱為隊頭(front),刪除動作稱為出隊
佇列的性質:先進先出(first-in, first-out)
雙向佇列:佇列的兩端都允許進行進隊和出隊操作。
佇列的實現原理
普通佇列:
初步設想:列表+兩個下標指標
建立乙個列表和兩個變數,front變數指向隊首,rear變數指向隊尾。初始時,front和rear都為0。
進隊操作:元素寫到li[rear]的位置,rear自增1。
出隊操作:返回li[front]的元素,front自減1。
環形佇列:
改進方案:將列表首尾邏輯上連線起來。
環形佇列:當隊尾指標front == maxsize + 1時,再前進乙個位置就自動到0。
實現方式:求餘數運算
隊首指標前進1:front = (front + 1) % maxsize
隊尾指標前進1:rear = (rear + 1) % maxsize
隊空條件:rear == front
隊滿條件:(rear + 1) % maxsize == front
資料結構 Python實現
參考部落格 演算法和資料結構 一 棧和佇列 python資料結構 棧 佇列的實現 一 python資料結構 棧 佇列的實現 二 python資料結構 鍊錶的實現 資料結構 定義 簡單來說,資料結構就是設計資料以何種方式組織並儲存在計算機中。比如 列表 集合與字典等都是一種資料結構。ps 程式 資料結...
Python實現Map資料結構
class hashtable def init self 初始化兩個list,乙個用來儲存鍵值,乙個用來儲存值 self.size 11 self.slots none self.size self.data none self.size 定義hash函式,使用餘數法 def hashfuncti...
資料結構 佇列(Python實現)
佇列的操作及實現 先進先出 佇列操作 佇列內容 返回值is empty true insert 2 insert 5 insert 8 2,52,5,8 pop 5,82 size 5,82 順序佇列 1 初始化 def init self self.que 2 判斷是否為空 def is empt...