從零開始 Python學習筆記(棧,佇列)

2021-09-10 07:57:19 字數 4956 閱讀 6624

棧(堆疊):是一種可存入資料、訪問、刪除等元素的容器

特點:後進先出

#棧實現:線性表、鍊錶

例:class nullstackerror(baseexception): #自定義空棧異常

definit(self):

super().init("null stack error ")

class mystack():

definit(self,len=0,list=none):

self.__len = 0

self.__list = list

def push(self,data):

self.__len += 1

def pop(self):

temp = none

if self.__len == 0:

raise nullstackerror()

else:

temp = self.__list.pop()

self.__len -= 1

return temp

def peek(self):

if self.__len == 0:

raise nullstackerror()

else:

return self.__list[-1]

def length(self):

return self.__len()

#棧的應用:表示式的表示,運算,變換

中綴表示式:運算子寫在兩個運算物件之間(最常用)

字首表示式:所有運算子寫在運算物件之前

字尾表示式:所有運算子寫在運算物件之後(更便於計算機處理)

字首和字尾表示式不需要引進括號,或者優先順序,結合性的規定

1.中綴表示式轉字尾表示式

1)遇到運算元直接拼到字串

2)遇到不同的運算子,要討論優先順序,出入棧

a,遇到"("

b,遇到")"

c,遇到"+","-"

d,遇到"","/"

2.計算字尾表示式

例:10以內字尾表示式計算

def middle2after(s = 「」):

rule =

str = 「」

list =

for item in s:

if item.isalnum():

str += item

else:

if item == "(":

elif item == ")":

while list[-1] != "(":

str += list.pop()

list.pop()

elif item == "+-":

if len(list) == 0:

else:

while len(list) != 0 and list[-1] != "(":

str += list.pop()

elif item == "*/":

else:

print("表示式有問題")

while len(list) != 0:

str += list.pop()

return str

佇列:與堆疊概念類似,但從一端插入元素,從另一端刪除元素

堆疊&佇列共同點:只允許在端點處插入或刪除

#普通佇列

class myquene(object):

definit(self,list=):

self.__list = list

def size(self):

return len(self.__list)

def delete(self):

if self.size() == 0:

print("空佇列不能刪除")

else:

temp_delete = self.__list[0]

del self.__list[0]

return temp_delete

def insert(self,data):

def peek(self):

if self.size() == 0:

print("空佇列不能檢視")

else:

return self.__list[0] #返回隊頭元素

a =

del a[0]

『』』#優先順序佇列

『』』class myqueue(object):

definit(self,list=):

self.__list = list

def size(self):

return len(self.__list)

def delete(self):

if self.size() == 0:

print("空佇列不能刪除")

else:

temp_delete = self.__list[0]

del self.__list[0]

return temp_delete

def insert(self,data):

if self.size() == 0:

else:

temp = -1

for i in range(len(self.__list)):

if self.__list[i] > data:

temp = i

break

if temp == -1:

else:

self.__list.insert(temp,data)

def peek(self):

if self.size() == 0:

print("空佇列不能檢視")

else:

return self.__list[0] #返回隊頭元素

q = myqueue()

q.insert(1)

q.insert(2)

q.insert(4)

q.insert(3)

print(q.delete())

print(q.delete())

print(q.delete())

print(q.delete())

#迴圈佇列

class xunhuan():

definit(self,list = ,first = none,last =none):

self.__list = list

self.__last = last

self.__first = first

def size(self):

length = 0

if self.__last > self.__first:

length = self.__last - self.__first + 1

elif self.__last == self.__first:

length = 1

else:

length = len(self.__list) - (self.__first - self.__last -1)

return length

def insert(self,data):

if self.size() == 0:

self.__first = 0

self.__last = 0

else:

if self.size() == len(self.__list):

self.__list.insert(self.__last + 1,data)

else:

if self.__last + 1 == len(self.__list):

self.__list[0] = data

else:

self.__list[self.__last + 1] = data

self.__last = self.__last + 1

def delete(self):

if self.size() == 0:

print("空佇列,無法刪除")

elif self.size() == 1:

temp = self.__first

self.__first = none

self.__last = none

return temp

else:

if self.first + 1 == len(self.__last):

self.__first = 0

else:

if self.__first + 1 == len(self.__list):

self.__first = 0

else:

self.__first = self.__first + 1

return temp

def peek(self):

if self.size() == 0:

print("空佇列")

else:

return self.__list[self.__first]

if item =="+":

c = b + a

elif item == "+":

c = b - a

elif item == "*":

c = b * a

elif item =="/":

c = b / a

else:

str = middle2after(「1+3*(4+2)/5+(6+7*8+6-9)」)

print(str)

從零開始node全棧學習筆記

計畫寫乙個node全棧的學習過程,不定期更新,因為不想給自己的定位只是前端開發,想多了解後端的學習。筆記最初是記在有道雲筆記的,現在分享出來,如有問題可以請各路大神指點。首先需要乙個伺服器。使用遠端登入工具 如x shell或secure 登入終端 ssh username ip輸入對應的密碼 安裝...

從零開始 Python3 學習筆記

感覺有必要學習一門計算機語言,之前學過的計算機語言早已經還給老師了,現在想想實在是浪費 現在算是從零開始學了 在網上查了一下python入門比較簡單,應用面比較廣,好吧,於是就選它吧 短期的目標是做乙個簡單的爬蟲,爬取某網頁上的資料 網上看了一下案例 importurllib.request url...

3 15學習筆記 從零開始

開啟python的方法 windows 環境 cmd 命令列輸入 python 另一種使用方法 先編寫程式在通過字尾為.py來儲存,然後再用cmd開啟 好處 修改時比較方便,可以直接拿滑鼠去消除或者新增 print 輸出括號中得字元 命名變數 直接命名用等號連線。不需要提前命名 print type...