python資料結構 棧和佇列以及演算法 排序

2021-10-07 16:44:46 字數 3134 閱讀 4320

棧(stack),有些地方稱為堆疊,是一種容器,可存入資料元素、訪問元素、刪除元素,它的特點在於只能允許在容器的一端(稱為棧頂端指標,英語:top)進行加入資料(英語:push)和輸出資料(英語:pop)的運算。採用lifo(後進先出)的原理運作

再棧中新增元素被稱之為壓棧(push),刪除元素被稱之為出棧(pop)

class stack(object):

def __init__(self):

self.__list =

def push(self, item):

# 新增乙個新的元素item到棧頂

def pop(self):

# 彈出棧頂元素

return self.__list.pop()

def peek(self):

# 返回棧頂元素

if self.__list:

return self.__list[-1]

else:

return none

def is_empty(self):

# 判斷棧是否為空

return self.__list ==

def size(self):

# 返回棧的元素個數

return len(self.__list)

佇列(queue)是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表,採用fifo(先進先出)的原理運作

class queue(object):

# 佇列

def __init__(self):

self.__list =

def enqueue(self, item):

# 往佇列中新增乙個item元素

def dequeue(self):

# 從佇列頭部刪除乙個元素

return self.__list.pop(0)

def is_empty(self):

# 判斷乙個佇列是否為空

return self.__list ==

def size(self):

# 返回佇列的大小

return len(self.__list)

雙端佇列中的元素可以從兩端彈出,其限定插入和刪除操作在表的兩端進行。雙端佇列可以在佇列任意一端入隊和出隊。

class deque(object):

# 雙端佇列

def __init__(self):

self.__list =

def add_front(self, item):

# 往佇列頭中新增乙個item元素

self.__list.insert(0,item)

def add_rear(self, item):

# 往佇列尾中新增乙個item元素

def pop_front(self):

# 從佇列頭部刪除乙個元素

return self.__list.pop(0)

def pop_rear(self):

# 從佇列尾部刪除乙個元素

return self.__list.pop()

def is_empty(self):

# 判斷乙個佇列是否為空

return self.__list ==

def size(self):

# 返回佇列的大小

return len(self.__list)

排序的穩定性:排序之後的序列和排序之前的序列相比位置不發生改變,則稱之為穩定排序演算法

氣泡排序(英語:bubble sort)是一種簡單的排序演算法。它重複地遍歷要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。遍歷數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。穩定性:穩定

def bubble_sort(alist):

n = len(alist)

for j in range(0, n - 1):

count = 0

for i in range(0, n - 1 - j):

# 第一次迴圈

if alist[i] > alist[i + 1]:

alist[i], alist[i + 1] = alist[i + 1], alist[i]

count += 1

if 0 == count:

return

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。穩定性:不穩定

def sel_sort(alist):

n = len(alist)

for j in range(0,n-1):#0~n-2

min_index = j

for i in range(j+1, n):

if alist[min_index] > alist[i]:

min_index = i

alist[j], alist[min_index] = alist[min_index], alist[j]

它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序在實現上,在從後向前掃瞄過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。穩定性:穩定

def insert_sort(alist):

n = len(alist)

# 從右邊的無序序列中取出多少個元素執行這樣的過程

for j in range(1, n):

# j=[1,2,3,n-1]

# i 代表內層迴圈的起始值

i = j

# 執行從右邊的無序序列中取出第乙個元素,即i位置的元素然後將其插入到前面的正確位置中

while i > 0:

if alist[i] < alist[i - 1]:

alist[i], alist[i - 1] = alist[i - 1], alist[i]

i -= 1

else:

break

資料結構 佇列和棧 Python 實現

佇列和棧都是一種特殊的線性表,所以也各有順序表和煉表兩種表示方法。佇列的python版本資料結構如下 coding utf 8 class node object def init self,value,next 0 self.value value self.next next 指標 class ...

資料結構 棧和佇列

棧 基礎 知識棧 練習題 佇列 基礎知識 棧示意圖 後進先出 順序棧結構定義 define maxsize 1024 struct stack 操作函式 push 入棧 pop 出棧 struct lstack 鏈棧示意圖 操作函式 push 入棧 pop 出棧 注意 也可以直接呼叫系統已經寫好的庫...

資料結構 棧和佇列

本章的基本內容是 兩種特殊的線性表 棧和佇列 從資料結構角度看,棧和佇列是操作受限的線性表,他們的邏輯結構相同。從抽象資料型別角度看,棧和佇列是兩種重要的抽象資料型別。p棧 限定僅在表的一端進行插入和刪除操作的線性表。p允許插入和刪除的一端稱為棧頂,另一端稱為棧底。p空棧 不含任何資料元素的棧。a ...