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

2021-08-04 10:23:01 字數 2032 閱讀 6356

主要涉及三種資料儲存型別:棧,佇列,優先順序佇列。這些資料儲存型別的生命週期比陣列等資料結構要短得多,在程式執行期間才被建立。棧的主要機制可以用陣列來實現;佇列,優先順序佇列可以使用陣列或者一種特別的樹 - 堆來實現。通過對陣列進行封裝,使得他們面向的問題更加專業。

1)在這些資料結構中,只有乙個資料項可以被訪問。

2)棧的操作是在棧頂壓入乙個資料項,以及從棧頂移除乙個資料項。

3)佇列的操作是在隊尾壓入資料,在隊頭取出資料。

4)優先順序佇列的操作是有序的插入資料,從隊頭取出關鍵字最小、最大的資料。

1. 棧

1.1. 棧的實現

棧只允許訪問乙個資料項,即最後插入的資料項。移除這個資料項才能訪問第二個資料項。一般來說將陣列經過一定包裝,使之滿足壓棧,彈棧的性質就能實現棧的基本能力。棧通常包含三個資料成員,兩個基本方法:乙個陣列,乙個最大棧空間,乙個top指標;壓棧,彈棧(讀取棧頂元素)。

/**

* @file 簡單地說, 棧就是將陣列進行封裝來更方便的實現一些功能

* @author zkj

* @date 2017-07-27

*/class stack

// 壓棧

public void push(int element)

// 彈棧

public int pop()

}

1.2 棧的應用

棧的主要應用:文字匹配,比如檢測源程式中括號匹配問題;算術表示式解析,比如3 * (4 + 5);大部分微處理器基於棧的體系結構,在函式被呼叫時壓棧,彈棧。

1.2.1 文字括號匹配

對於一串文字,檢查括號是否匹配,比如abcwxyz,檢測括號是否配對。解決辦法:遍歷字串,將時,彈棧,進行比較,看兩者是否匹配。

// 棧類:實現棧操作

class stackchar

// 壓棧

public void push(char element)

// 彈棧

public char pop()

// 棧滿?

public boolean isfull()

// 棧空?

public boolean isempty()

}

// 檢查是否匹配

class bracketchecker

public void check() ':

case ']':

case ')':

if (!thestack.isempty()) ') || (chx == '[' && ch != ']') || (chx == '(' && ch != ')'))

}else

system.out.println("error: " + ch + " at " + i);

default:

break;

}}

if (!thestack.isempty())

}}

2. 佇列

棧的特性是:先進後出;佇列則是:先進先出。比如印表機列印東西的順序,銀行叫號排隊系統等等。佇列六個基本元素:儲存資料的陣列,頭指標,尾指標,佇列最大尺寸,資料進佇列,資料出佇列。

2.1 佇列的實現

// 佇列類

class queue

// 壓入佇列

public void push(int element) }

// 移除佇列

public int pop()

}

3. 優先順序佇列

優先順序佇列是指佇列中的元素按照某種順序進行排列,比如數值型資料的大小順序,字元型資料字典序等等。有序插入,隊頭取出。

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

1 棧 code package chapterone public class stack 出棧操作 public long pop 進棧操作 public void push long value 判斷棧是否為空 public boolean isempty 判斷棧是否已滿 public boo...

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

1 棧 package chapterone public class stack 出棧操作 public long pop 進棧操作 public void push long value 判斷棧是否為空 public boolean isempty 判斷棧是否已滿 public boolean ...

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

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