資料結構 演算法 03

2021-09-13 23:24:12 字數 1075 閱讀 3616

1.棧結構實現

棧可以用順序表實現,也可以用鍊錶實現。

棧的操作

stack() 建立乙個新的空棧

push(item) 新增乙個新的元素item到棧頂

pop() 彈出棧頂元素

peek() 返回棧頂元素

is_empty() 判斷棧是否為空

size() 返回棧的元素個數

2. 佇列

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

佇列是一種先進先出的(first in first out)的線性表,簡稱fifo。允許插入的一端為隊尾,允許刪除的一端為隊頭。佇列不允許在中間部位進行操作!假設佇列是q=(a1,a2,……,an),那麼a1就是隊頭元素,而an是隊尾元素。這樣我們就可以刪除時,總是從a1開始,而插入時,總是在佇列最後。這也比較符合我們通常生活中的習慣,排在第乙個的優先出列,最後來的當然排在隊伍最後。

3. 佇列的實現

同棧一樣,佇列也可以用順序表或者鍊錶實現。

操作queue() 建立乙個空的佇列

enqueue(item) 往佇列中新增乙個item元素

dequeue() 從佇列頭部刪除乙個元素

is_empty() 判斷乙個佇列是否為空

size() 返回佇列的大小

4. 雙端佇列

雙端佇列(deque,全名double-ended queue),是一種具有佇列和棧的性質的資料結構。

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

操作deque() 建立乙個空的雙端佇列

add_front(item) 從隊頭加入乙個item元素

add_rear(item) 從隊尾加入乙個item元素

remove_front() 從隊頭刪除乙個item元素

remove_rear() 從隊尾刪除乙個item元素

is_empty() 判斷雙端佇列是否為空

size() 返回佇列的大小

資料結構與演算法(03)

1.雙鏈表應用例項 1.1雙向鍊錶的操作分析和實現 使用帶head頭的雙向鍊錶實現 管理單向鍊錶的缺點分析 1 單向鍊錶,查詢的方向只能是乙個方向,而雙向鍊錶可以向前或者向後查詢。2 單向鍊錶不能自我刪除,需要靠輔助節點,而雙向鍊錶可以自我刪除,單鏈表刪除時節點,總是找到temp,temp是刪除節點...

資料結構與演算法03 單鏈表

使用帶頭節點的單向鍊錶,實現水滸英雄排行榜的管理。對英雄人物完成增刪改查等操作。package com.wang.linkedlist author wzy create 2020 02 03 12 35 public class linkedlist 定義singlelinkedlist clas...

資料結構與演算法03 約瑟夫問題

約瑟夫問題 39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓。於是決定了自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺。然後下乙個重新報數,直到所有人都自殺身亡為止。然而josephus 和他的朋友並不想遵從,joseph...