Python資料結構與演算法分析(第2版)閱讀筆記

2021-10-10 06:55:41 字數 3250 閱讀 4993

正文提取碼: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...