演算法 棧 佇列 二分查詢

2022-07-17 20:42:11 字數 2669 閱讀 2043

class stack():

def __init__(self): # 例項化乙個空棧

self.items = # 容器

def push(self,item): # item就是向棧中新增的元素(從棧頂新增到棧底)

def pop(self):

return self.items.pop()

def isempty(self):

return self.items ==

def size(self):

return len(self.items)

# 例項化乙個空棧

stack = stack()

stack.push(1)

stack.push(2)

stack.push(3)

print(stack.pop()) # 3

print(stack.pop()) # 2

print(stack.pop()) # 1

# 佇列實現思路:先進先出,將元素存於列表中,新增時永遠插在索引為0的位置,取出時永遠取索引的最後乙個

class queue():

def __init__(self): # 例項化乙個空佇列

self.items =

def enqueue(self,item): # 新增元素

self.items.insert(0,item)

def dequeue(self): # 取元素

return self.items.pop()

def isempty(self): # 是否為空

return self.items ==

def size(self): # 判斷長度

return len(self.items)

q = queue()

q.enqueue(1)

q.enqueue(2)

q.enqueue(3)

print(q.dequeue())

print(q.dequeue())

print(q.dequeue())

案例:燙手的山芋

# 佇列實現思路:先進先出,將元素存於列表中,新增時永遠插在索引為0的位置,取出時永遠取索引的最後乙個

class queue():

def __init__(self): # 例項化乙個空佇列

self.items =

def enqueue(self,item): # 新增元素

self.items.insert(0,item)

def dequeue(self): # 取元素

return self.items.pop()

def isempty(self): # 是否為空

return self.items ==

def size(self): # 判斷長度

return len(self.items)

kids = ['a','b','c','d','e','f']

# 將孩子加入到佇列中

kids_queue = queue() # 例項化乙個空佇列

for kid in kids:

kids_queue.enqueue(kid)

while kids_queue.size() > 1: # 長度為1時結束

for i in range(6):

first_kid = kids_queue.dequeue()

kids_queue.enqueue(first_kid)

# 6次傳遞結束之後需要將隊頭孩子刪除出佇列

kids_queue.dequeue()

print('獲勝的孩子是:',kids_queue.dequeue())

例題:給定列表,用二分查詢,查詢元素7

# 二分查詢的前提是序列有序,所以先排序

# lst = [1,3,11,18,4,5,7,9]

# print(sorted(lst))

def find(alist, item):

# left,right表示列表的起始索引

left = 0

right = len(alist) - 1

isfind = false # 是否找到的標識

while left <= right:

# 中間值的索引,地板除

mid_index = (right + left) // 2

# 中間值大於要查詢的值,right移動

if alist[mid_index] > item:

right = mid_index - 1

else:

# 查詢到,修改isfind,並終止迴圈

if alist[mid_index] == item:

isfind = true

break

else:

left = mid_index + 1

return isfind

alist = [1, 3, 4, 5, 7, 9]

print(find(alist, 7))

查詢演算法 二分查詢

利用二分查詢演算法查詢某乙個元素,前提條件是該被查詢的元素是乙個已經有序的陣列。二分查詢的思想是將陣列元素的最高位 high 和最低位 low 進行標記,取陣列元素的中間 mid 和和要查詢的值 key 進行比較,如果目標值比中間值要大,則將最低位設定為mid 1,繼續進行查詢。如果目標值小於中間值...

查詢演算法 二分查詢

二分查詢的思路是很簡單的,前提是這組資料是有順序的。思路是從中間找乙個數,判斷大小,如果數比中間數大,說明在中間數到結尾的數中,如果小於,則說明在開始和中間數之間,經過多次相同操作,就可以得到我們想查詢的數時間複雜度就是 o logn 非遞迴的實現 const testarr let i 0whil...

查詢演算法 二分查詢

二分查詢是乙個常用的查詢演算法,其原理在於通過不斷切分乙個規則排序,對半的去尋找目標元素所在的區間與位置。但是其有乙個前提,那就是資料結構需要是順序儲存結構,並且關鍵字大小有序排列。例子如下 例 有乙個數列 12,23,45,56,67,89 請使用二分查詢找到56的位置 解 首先mid 0 5 2...