棧(堆疊):是一種可存入資料、訪問、刪除等元素的容器
特點:後進先出
#棧實現:線性表、鍊錶
例: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...