日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python数据结构与算法(第五天)

發(fā)布時(shí)間:2025/3/21 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python数据结构与算法(第五天) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

34.棧與隊(duì)列的概念

棧(stack),有些地方稱為堆棧,是一種容器,可存入數(shù)據(jù)元素、訪問元素、刪除元素,它的特點(diǎn)在于只能允許在容器的一端(稱為棧頂端指標(biāo),英語:top)進(jìn)行加入數(shù)據(jù)(英語:push)和輸出數(shù)據(jù)(英語:pop)的運(yùn)算。沒有了位置概念,保證任何時(shí)候可以訪問、刪除的元素都是此前最后存入的那個(gè)元素,確定了一種默認(rèn)的訪問順序。

由于棧數(shù)據(jù)結(jié)構(gòu)只允許在一端進(jìn)行操作,因而按照后進(jìn)先出(LIFO, Last In First Out)的原理運(yùn)作。

隊(duì)列

隊(duì)列(queue)是只允許在一端進(jìn)行插入操作,而在另一端進(jìn)行刪除操作的線性表。

隊(duì)列是一種先進(jìn)先出的(First In First Out)的線性表,簡(jiǎn)稱FIFO。允許插入的一端為隊(duì)尾,允許刪除的一端為隊(duì)頭。隊(duì)列不允許在中間部位進(jìn)行操作!假設(shè)隊(duì)列是q=(a1,a2,……,an),那么a1就是隊(duì)頭元素,而an是隊(duì)尾元素。這樣我們就可以刪除時(shí),總是從a1開始,而插入時(shí),總是在隊(duì)列最后。這也比較符合我們通常生活中的習(xí)慣,排在第一個(gè)的優(yōu)先出列,最后來的當(dāng)然排在隊(duì)伍最后。

35.棧的實(shí)現(xiàn)??

棧結(jié)構(gòu)實(shí)現(xiàn)

棧可以用順序表實(shí)現(xiàn),也可以用鏈表實(shí)現(xiàn)。

棧的操作

  • Stack() 創(chuàng)建一個(gè)新的空棧
  • push(item) 添加一個(gè)新的元素item到棧頂
  • pop() 彈出棧頂元素
  • peek() 返回棧頂元素
  • is_empty() 判斷棧是否為空
  • size() 返回棧的元素個(gè)數(shù)
class Stack(object):"""棧"""def __init__(self):self.__list = []def is_empty(self):"""判斷是否為空"""return self.__list == []def push(self, item):"""加入元素"""self.__list.append(item)def pop(self):"""彈出元素"""return self.__list.pop()def peek(self):"""返回棧頂元素"""return self.__list[len(self.__list)-1]def size(self):"""返回棧的大小"""return len(self.__list)if __name__ == "__main__":stack = Stack() stack.push(1) stack.push(2) stack.push(3) print(stack.pop()) print(stack.pop()) print(stack.pop()) 3 2 1

36.隊(duì)列與雙端隊(duì)列的實(shí)現(xiàn)

隊(duì)列的實(shí)現(xiàn)

同棧一樣,隊(duì)列也可以用順序表或者鏈表實(shí)現(xiàn)。

操作

  • Queue() 創(chuàng)建一個(gè)空的隊(duì)列
  • enqueue(item) 往隊(duì)列中添加一個(gè)item元素
  • dequeue() 從隊(duì)列頭部刪除一個(gè)元素
  • is_empty() 判斷一個(gè)隊(duì)列是否為空
  • size() 返回隊(duì)列的大小
class Queue(object):"""隊(duì)列"""def __init__(self):self.__list = []def is_empty(self):return self.__list == []def enqueue(self, item):"""進(jìn)隊(duì)列"""self.__list.insert(0,item)def dequeue(self):"""出隊(duì)列"""return self.__list.pop()def size(self):"""返回大小"""return len(self.__list)if __name__ == "__main__":q = Queue()q.enqueue(1)q.enqueue(2)q.enqueue(3)print(q.size())print(q.dequeue())print(q.dequeue())print(q.dequeue()) 3 1 2 3

雙端隊(duì)列

雙端隊(duì)列(deque,全名double-ended queue),是一種具有隊(duì)列和棧的性質(zhì)的數(shù)據(jù)結(jié)構(gòu)。

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

操作

  • Deque() 創(chuàng)建一個(gè)空的雙端隊(duì)列
  • add_front(item) 從隊(duì)頭加入一個(gè)item元素
  • add_rear(item) 從隊(duì)尾加入一個(gè)item元素
  • remove_front() 從隊(duì)頭刪除一個(gè)item元素
  • remove_rear() 從隊(duì)尾刪除一個(gè)item元素
  • is_empty() 判斷雙端隊(duì)列是否為空
  • size() 返回隊(duì)列的大小
class Deque(object):"""雙端隊(duì)列"""def __init__(self):self.__list = []def is_empty(self):"""判斷隊(duì)列是否為空"""return self.__list == []def add_front(self, item):"""在隊(duì)頭添加元素"""self.__list.insert(0,item)def add_rear(self, item):"""在隊(duì)尾添加元素"""self.__list.append(item)def remove_front(self):"""從隊(duì)頭刪除元素"""return self.__list.pop(0)def remove_rear(self):"""從隊(duì)尾刪除元素"""return self.__list.pop()def size(self):"""返回隊(duì)列大小"""return len(self.__list)if __name__ == "__main__":deque = Deque()deque.add_front(1)deque.add_front(2)deque.add_rear(3)deque.add_rear(4)print(deque.size())print(deque.remove_front())print(deque.remove_front())print(deque.remove_rear())print(deque.remove_rear()) 4 2 1 4 3


37.排序算法的穩(wěn)定性

排序與搜索

排序算法(英語:Sorting algorithm)是一種能將一串?dāng)?shù)據(jù)依照特定順序進(jìn)行排列的一種算法。

排序算法的穩(wěn)定性

穩(wěn)定性:穩(wěn)定排序算法會(huì)讓原本有相等鍵值的紀(jì)錄維持相對(duì)次序。也就是如果一個(gè)排序算法是穩(wěn)定的,當(dāng)有兩個(gè)相等鍵值的紀(jì)錄R和S,且在原本的列表中R出現(xiàn)在S之前,在排序過的列表中R也將會(huì)是在S之前

當(dāng)相等的元素是無法分辨的,比如像是整數(shù),穩(wěn)定性并不是一個(gè)問題。然而,假設(shè)以下的數(shù)對(duì)將要以他們的第一個(gè)數(shù)字來排序。

(4, 1) (3, 1) (3, 7)(5, 6)

在這個(gè)狀況下,有可能產(chǎn)生兩種不同的結(jié)果,一個(gè)是讓相等鍵值的紀(jì)錄維持相對(duì)的次序,而另外一個(gè)則沒有:

(3, 1) (3, 7) (4, 1) (5, 6) (維持次序) (3, 7) (3, 1) (4, 1) (5, 6) (次序被改變)

不穩(wěn)定排序算法可能會(huì)在相等的鍵值中改變紀(jì)錄的相對(duì)次序,但是穩(wěn)定排序算法從來不會(huì)如此。不穩(wěn)定排序算法可以被特別地實(shí)現(xiàn)為穩(wěn)定。作這件事情的一個(gè)方式是人工擴(kuò)充鍵值的比較,如此在其他方面相同鍵值的兩個(gè)對(duì)象間之比較,(比如上面的比較中加入第二個(gè)標(biāo)準(zhǔn):第二個(gè)鍵值的大小)就會(huì)被決定使用在原先數(shù)據(jù)次序中的條目,當(dāng)作一個(gè)同分決賽。然而,要記住這種次序通常牽涉到額外的空間負(fù)擔(dān)。

?

38.冒泡排序及實(shí)現(xiàn)

冒泡排序

冒泡排序(英語:Bubble Sort)是一種簡(jiǎn)單的排序算法。它重復(fù)地遍歷要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序錯(cuò)誤就把他們交換過來。遍歷數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成。這個(gè)算法的名字由來是因?yàn)樵叫〉脑貢?huì)經(jīng)由交換慢慢“浮”到數(shù)列的頂端。

冒泡排序算法的運(yùn)作如下:

  • 比較相鄰的元素。如果第一個(gè)比第二個(gè)大(升序),就交換他們兩個(gè)。
  • 對(duì)每一對(duì)相鄰元素作同樣的工作,從開始第一對(duì)到結(jié)尾的最后一對(duì)。這步做完后,最后的元素會(huì)是最大的數(shù)。
  • 針對(duì)所有的元素重復(fù)以上的步驟,除了最后一個(gè)
  • 持續(xù)每次對(duì)越來越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對(duì)數(shù)字需要比較。

冒泡排序的分析

def bubble_sort(alist):n = len(alist)for j in range(n-1):# j表示每次遍歷需要比較的次數(shù),是逐漸減小的for i in range(n-1-j):if alist[i] > alist[i+1]:alist[i], alist[i+1] = alist[i+1], alist[i] if __name__ == "__main__":li=[1,50,100,2,4,55,11]bubble_sort(li)print(li) [1, 2, 4, 11, 50, 55, 100]

時(shí)間復(fù)雜度

  • 最優(yōu)時(shí)間復(fù)雜度:O(n) (表示遍歷一次發(fā)現(xiàn)沒有任何可以交換的元素,排序結(jié)束。)
  • 最壞時(shí)間復(fù)雜度:O(n^2)
  • 穩(wěn)定性:穩(wěn)定

39.選擇排序算法及實(shí)現(xiàn)

選擇排序

選擇排序(Selection sort)是一種簡(jiǎn)單直觀的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再?gòu)氖S辔磁判蛟刂欣^續(xù)尋找最小(大)元素,然后放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

選擇排序的主要優(yōu)點(diǎn)與數(shù)據(jù)移動(dòng)有關(guān)。如果某個(gè)元素位于正確的最終位置上,則它不會(huì)被移動(dòng)。選擇排序每次交換一對(duì)元素,它們當(dāng)中至少有一個(gè)將被移到其最終位置上,因此對(duì)n個(gè)元素的表進(jìn)行排序總共進(jìn)行至多n-1次交換。在所有的完全依靠交換去移動(dòng)元素的排序方法中,選擇排序?qū)儆诜浅:玫囊环N。

選擇排序分析

排序過程

?

def selection_sort(alist):n = len(alist)for i in range(n-1):min_index = ifor j in range(i+1, n):if alist[j] < alist[min_index]:min_index = jalist[i], alist[min_index] = alist[min_index], alist[i]alist = [54,226,93,17,77,31,44,55,20] selection_sort(alist) print(alist) [17, 20, 31, 44, 54, 55, 77, 93, 226]

時(shí)間復(fù)雜度

  • 最優(yōu)時(shí)間復(fù)雜度:O(n2)
  • 最壞時(shí)間復(fù)雜度:O(n2)
  • 穩(wěn)定性:不穩(wěn)定(考慮升序每次選擇最大的情況)

40.插入算法

插入排序

插入排序(英語:Insertion Sort)是一種簡(jiǎn)單直觀的排序算法。它的工作原理是通過構(gòu)建有序序列,對(duì)于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。插入排序在實(shí)現(xiàn)上,在從后向前掃描過程中,需要反復(fù)把已排序元素逐步向后挪位,為最新元素提供插入空間,后面是無序序列前面是有序序列。

def insert_sort(alist):# 從第二個(gè)位置,即下標(biāo)為1的元素開始向前插入for i in range(1, len(alist)):# 從第i個(gè)元素開始向前比較,如果小于前一個(gè)元素,交換位置for j in range(i, 0, -1):if alist[j] < alist[j-1]:alist[j], alist[j-1] = alist[j-1], alist[j]alist = [54,26,93,17,77,31,44,55,20] insert_sort(alist) print(alist) [17, 20, 26, 31, 44, 54, 55, 77, 93]

時(shí)間復(fù)雜度

  • 最優(yōu)時(shí)間復(fù)雜度:O(n) (升序排列,序列已經(jīng)處于升序狀態(tài))
  • 最壞時(shí)間復(fù)雜度:O(n2)
  • 穩(wěn)定性:穩(wěn)定

總結(jié)

以上是生活随笔為你收集整理的Python数据结构与算法(第五天)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 干综合网 | 欧美色图俺去了 | 免费观看成人鲁鲁鲁鲁鲁视频 | 色av网 | 超碰人人澡 | 精品国产综合区久久久久久 | 熟妇高潮精品一区二区三区 | 欧美精品成人一区二区在线观看 | 亚洲黄色三级视频 | 国产精品久久久久久久久久久久久久久久久久 | 一区二区久久 | 精品视频无码一区二区三区 | 国产精品va无码一区二区 | 欲色av| 国产野外作爱视频播放 | 男人午夜网站 | 欧美色女人 | 丝袜淫脚 | 在线视频成人 | 久久黄页 | 欧美黄色免费在线观看 | 三级av在线播放 | 亚洲天天看| 亚洲欧美一区在线 | 成人av手机在线 | 欧美69精品久久久久久不卡 | 欧美日韩在线视频一区 | 日韩视频免费在线观看 | 国产日韩一区二区在线 | 舌奴调教日记 | 国产黄a | 第一章豪妇荡乳黄淑珍 | 熟女肥臀白浆大屁股一区二区 | 欧美一级欧美三级在线观看 | 色老二导航 | 女王脚交玉足榨精调教 | 日日夜夜拍| 国产在线观看99 | 亲嘴扒胸摸屁股免费视频日本网站 | 波多野结衣在线免费观看视频 | 国产aⅴ | 欧美日韩成人精品 | 一级片特黄 | 精品www久久久久久奶水 | 短篇山村男同肉耽h | 天天综合天天 | 成人无码视频 | 国产免费又爽又色又粗视频 | 免费人成在线观看视频播放 | 91av小视频| 欧美成人一区二免费视频软件 | 日韩 欧美 亚洲 国产 | 97人妻精品一区二区三区视频 | 欧美久久久久久久久 | 第四色视频 | 涩涩网站在线观看 | 欧美成人黑人xx视频免费观看 | 最好看的2019年中文视频 | 午夜影院性 | 国产精品国产自产拍高清av | 亚洲一级影片 | 天天插日日干 | 蜜臀久久精品久久久用户群体 | 久草免费在线播放 | 欧美成人一区二区三区四区 | 91亚洲欧美激情 | 九九久久国产 | 色阁av | 亚洲图片在线播放 | 成人毛片视频免费看 | 精品一性一色一乱农村 | 奇米影视亚洲 | 99成人在线视频 | 欧美三级网 | 欧美伊人| 久久福利社 | 91美女在线观看 | 婷婷丁香一区二区三区 | 一区二区亚洲视频 | 韩国三级在线 | 一区二区三区波多野结衣 | 亚洲又粗又长 | 日本成人在线免费视频 | 国产一二三精品 | 99免费 | 欧美群妇大交群 | 97超碰人| 2019日韩中文字幕 | 久久久久久久久久成人 | 国产美女视频网站 | 成人午夜电影网站 | 亚洲中文字幕无码一区二区三区 | 欧美一级淫片 | av毛片在线看 | 久久久久久久成人 | 欧美aaa级| 国产中文字幕视频 | 免费瑟瑟网站 | 波多野结衣操 |