棧(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 ...