資料結構與演算法之棧與佇列《四》

2021-07-29 06:34:10 字數 1928 閱讀 1857

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

佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。

棧與佇列是重要的基礎資料結構,其作用更多體現在其思想上。

棧 是先進後出原則

佇列 是先進先出原則

這兩種不同的思想決定了他們不同的用途,

棧的應用場景

1.符號匹配

2.中綴表示式轉化為字尾表示式

3.計算字尾表示式

4.實現函式的呼叫

5.文字編譯器中的撤銷按鈕

6.網頁瀏覽器的歷史記錄。

7.作為乙個演算法輔助資料結構 比如樹的遍歷

佇列的應用場景

1.作業系統的順序排程

2.多道程式設計

3.非同步資料傳輸

4.作為演算法的輔助資料結構(樹的層次遍歷)

棧與佇列都可以使用陣列和鍊錶實現而且實現的效果類似

限於篇幅,這裡就給出棧的實現**,佇列可以以此類推

陣列實現棧

//利用動態陣列來實現動態棧

public

class

stackbydynamicarray

// 判斷棧是否為空

public

boolean

isempty()

// 判斷棧是否滿了

public

boolean

isfull()

// 若棧滿則擴充棧,每次擴充是當前棧的一倍

public

void

doublestack()

// 壓棧

public

void

push(object obj) else

array[++top] = obj;

}// 出棧

public object pop() throws exception else

return array[top--];

}// 刪棧

public

void

deletestack()

鍊錶實現棧

//棧的節點物件

public

class stacknode

public

void

setnext(stacknode next)

public object getdata()

public

void

setdata(object data)

}public

class stackbylinkedlist else

}// 返回棧頂的資料

public object top()

// 出棧

public object pop() throws exception

}// 是否為空

public boolean isempty()

// 刪除棧

public

void

deletestack()

就此棧的實現差不多就完成了。

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

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

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

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

資料結構與演算法02 之棧與佇列

棧的主要機制可以用陣列來實現,也可以用鍊錶來實現,下面用陣列來實現棧的基本操作 public class arraystack public void push long value a top value public long peek return a top public long pop ...