資料結構與演算法基礎 棧 佇列儲存 單鏈表實現

2021-10-01 13:12:25 字數 2812 閱讀 6228

棧(stack)又名堆疊,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。

**實現:

/**

* @author: stephen

* @date: 2019/12/17 22:47

* @content: 實現棧儲存

*/public class mystack

// 壓入元素

public void push(objects element)

newarr[elements.length]

= element;

elements = newarr;

}// 取出棧頂元素

public object pop(

) // 去除陣列的最後乙個元素

object element = elements[elements.length-1]

;// 建立乙個新的陣列

object[

] newarr = new object[elements.length-1]

;// 原陣列中除了最後乙個元素的其它元素都放入到新陣列中

for(

int i=

0;i1;i++)

// 替換陣列

elements = newarr;

// 返回棧頂元素

return element;

}// 檢視棧頂元素

public object peek(

) // 判斷棧是否為空

public

boolean isempty(

)}

定義:佇列,又稱為佇列(queue),是先進先出(fifo, first-in-first-out)的線性表。在具體應用中通常用鍊錶或者陣列來實現。佇列只允許在後端(稱為rear)進行插入操作,在前端(稱為front)進行刪除操作。

和堆疊一樣的,也有兩種操作,進隊(enqueue)和出隊(dequeue),對於空佇列進行出隊操作會造成下溢位(underflow),相應的堆滿佇列進行進隊操作為發生上溢位

**實現

/**

* @author: stephen

* @date: 2019/12/17 23:17

* @content: 實現佇列

*/public class myqueue

/*** 入隊

* @param element

*/public void add

(object element)

newarr[elements.length]

= element;

elements = newarr;

}/**

* 出隊 : 將對頭的取出

*/public object poll(

) // 把陣列中的第0個元素取出

object element = elements[0]

; object[

] newarr = new object[elements.length-1]

;for

(int i=

0;i// 替換陣列

elements = newarr;

return element;

}public

boolean isempty(

)}

單鏈表是鍊錶的其中一種基本結構。乙個最簡單的結點結構如圖所示,它是構成單鏈表的基本結點結構。在結點中資料域用來儲存資料元素,指標域用於指向下乙個具有相同結構的結點。

因為只有乙個指標結點,稱為單鏈表。

單鏈表中三個概念需要區分清楚:分別是頭指標,頭節點和首元節點。

單鏈表中可以沒有頭結點,但是不能沒有頭指標!

頭節點的引入能使鍊錶對第乙個元素的刪除和插入和其他元素相同,不用另外說明,使得**更加簡潔。

**實現

/**

* @author: stephen

* @date: 2019/12/17 23:45

* @content: 單鏈表的實現

*/public class node

// 為節點追加節點

// 想要在乙個節點無線追加

// 判斷當前節點是否有元素

node currentnode = this;

// 迴圈向後找

while

(true

) // 賦給當前節點

currentnode = nextnode;

}// 把需要追加的節點追加為找到當前節點的下乙個節點

currentnode.

next

= node;

return this;

}// 獲取下乙個節點

public node next()

// 獲取節點中的資料

public object getdata(

) // 判斷當前節點是否是最後乙個節點

public

boolean islast(

)}

佇列 棧(資料結構與演算法)

佇列是一種先進先出 fifo 的資料結構,從隊尾進,從隊頭出 在 fifo 資料結構中,將首先處理新增到佇列中的第乙個元素。如上圖所示,佇列是典型的 fifo 資料結構。插入 insert 操作也稱作入隊 enqueue 新元素始終被新增在佇列的末尾。刪除 delete 操作也被稱為出隊 deque...

資料結構與演算法(棧與佇列)

棧 stack 有些地方稱為堆疊,是一種容器,可存入資料元素 訪問元素 刪除元素,他的特點在於只能允許在容器的一端 稱為棧頂端指標,英語top 進行加入資料 英語push 和輸出資料 英語pop 的運算。沒有了位置概念,保證任何時候可以訪問 刪除的元素都是此前最後存入的那個元素,確定了一種預設的訪問...

資料結構與演算法 棧和佇列

棧 是限制在表的一端進行插入和刪除運算的線性表。棧又稱後進先出簡稱lifo表 佇列 也是一種運算受限的線性表。它只允許在標的一端進行插入,而在另一端進行刪除。佇列亦稱先進先出fifo表 1.棧與佇列的區別 1 佇列先進先出,棧先進後出。2 對插入和刪除操作的 限定 棧是限定只能在表的一端進行插入和刪...