主要涉及三種資料儲存型別:棧,佇列,優先順序佇列。這些資料儲存型別的生命週期比陣列等資料結構要短得多,在程式執行期間才被建立。棧的主要機制可以用陣列來實現;佇列,優先順序佇列可以使用陣列或者一種特別的樹 - 堆來實現。通過對陣列進行封裝,使得他們面向的問題更加專業。
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 又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它...