正文提取碼:fjlk
中序表示式,前序表示式,後續表示式
使用棧這種資料結構來儲存
a*b+c
a : 存入列表末端
* :入棧
b :存入列表末尾
+ :入棧之前,判斷棧裡是否有高於或等於其優先順序的運算子,若有,將其彈出並存到列表末尾,把 * 存到列表末尾,+ 號入棧
b :存入列表尾部
帶括號的情況
(a+b)*c-(d-e)*(f+g)
( 表示遇到打破優先順序的運算子 入棧
a到列表尾部
+ 入棧
b 列表尾部
)和左括號匹配,左右括號出棧,之間的運算子出棧,到列表尾部,以此類推
。。。
**import string
class
stack()
:def
__init__
(self)
: self.items =
defis_empty
(self)
:return self.items ==
defpush
(self,item)
:def
pop(self)
:return self.items.pop(
)def
peek
(self)
:return self.items[
len(self.items)-1
]def
size
(self)
:return
len(self.items)
#生成後序
deffun1
(strs)
: prec =
op_stack = stack(
) res =
strs_list = strs.split(
)print
(strs_list)
for i in strs_list:
# print(res)
if i notin[
'+',
'-',
'*',
'/',
'(',
')']
:print
('*****'
)continue
if i ==
"(":
op_stack.push(i)
continue
if i ==
")":
key = op_stack.pop(
)while key !=
"(":
if op_stack.is_empty():
break
key = op_stack.pop(
)continue
while
(not op_stack.is_empty())
and(prec[op_stack.peek()]
>= prec[i]):
))op_stack.push(i)
while
not op_stack.is_empty():
))fun2(
' '.join(res)
)#計算後續表示式
deffun2
(strs)
:print
(strs)
temp_stack = stack(
) strs_list = strs.split(
)for i in strs_list:
if i in
['+'
,'-'
,'*'
,'/']:
num_1 = temp_stack.pop(
) num_2 = temp_stack.pop(
) temp_stack.push(
eval
("{}{}{}"
.format
(num_2,i,num_1)))
else
: temp_stack.push(i)
continue
print
(temp_stack.pop())
if __name__ ==
'__main__'
: fun1(
"( 3 + 6 ) * ( 100 + 200 )"
)# fun1("( a + b ) * c")
約瑟夫問題
class
queue()
:def
__init__
(self)
: self.items =
defis_empty
(self)
:return self.items ==
defenqueue
(self,item)
: self.items.insert(
0,item)
defdequeuq
(self)
:return self.items.pop(
)def
size
(self)
:return
len(self.items)
defyuesefu()
: num =
0 queue = queue(
)for i in
range(39
):queue.enqueue(i)
while1:
temp = queue.dequeuq(
) queue.enqueue(temp)
num +=
1if num ==7:
queue.dequeuq(
) num =
0if queue.size()==
1:break
print
(queue.dequeuq())
if __name__ ==
'__main__'
: yuesefu(
)
印表機問題
資料結構與演算法分析
資料結構與演算法分析可以稱得上是程式設計師必須修煉的內功心法。資料的儲存結構 資料元素在計算機中的儲存方式 資料的操作集合 對一種資料型別的資料所有操作,例如對資料的增刪改查等等!演算法分析主要分析 下面是一些常用資料結構 一 線性表 1.陣列實現 2.鍊錶 二 棧與佇列 三 樹與二叉樹 1.樹2....
資料結構與演算法分析
資料結構 大量資料的組織方法 演算法分析 演算法執行時間的估算。涉及到計算效率。設想,如果能把時間限制從16年減至不到1秒,不很神奇嗎?在很多問題中,乙個重要的觀念是 寫出乙個可以工作的程式並不夠。如果這個程式在巨大的資料集上執行,執行時間就成了重要的 問題。演算法,是為求解乙個問題需要遵循的 被清...
python資料結構與演算法
coding utf 8 import sys 使用以下語句將引數的str格式轉換為int格式 l list map int sys.argv 1 split target int sys.argv 2 def binarysearch print l print target left 0 rig...