如何用陣列實現佇列和棧?
阿新 • • 發佈:2018-12-23
用陣列結構實現大小固定的棧和佇列,這是一個面試的常考題目,也是一個比較簡單的題目。
1.實現棧結構:棧結構是先進後出的,只需要一個數組和一個記錄位置的變數size,當進來一個元素,size就++,出去一個元素size就–。
2.實現佇列結構:相對棧結構要難搞一些,佇列的先進先出的,需要一個數組和三個變數,size記錄已經進來了多少個元素,in記錄剛進來的元素應該放在哪個位置,out表示使用者要求彈出的元素所在的位置。size的作用不止於此,它還是in與out 的操作的關鍵資訊,使得in與out解耦,避免的很多的麻煩,好像書本講的是沒有size這個變數的。當in或者out達到底部的時候就跳回0處。
- /**
- * 固定陣列實現一個佇列
- * 佇列先進先出,方法有push,pull,peek
- */
- public class C02_ArrayToQueue {
- public static class MyQueue{
- private int out;//新進來的數 放這
- private int in;//使用者要求彈出的數
- private int size;//已經進佇列的個數
- private int arr[];
- public MyQueue(int iniSize){
- arr = new int[iniSize];
- size = 0
; - in = 0;
- out = 0;
- }
- public void push(int num){
- if(size==arr.length){
- throw new RuntimeException(“the queue is full!”);
- }
- size++;//大小擴充套件一個
- arr[in] = num;//賦值
- in = in==arr.length-1 ? 0 : in+1;//如果已經到達陣列末尾就重新等於0
- }
- public int pull(){
- if(size==0){
- throw new RuntimeException(“the queue is empty!”);
- }
- size–;
- int t = out;//記錄
- out = out==arr.length-1 ? 0 : out+1;//如果已經到達陣列末尾就重新等於0
- return arr[t];
- }
- public int peek(){
- if(size==0){
- throw new RuntimeException(“the queue is empty!”);
- }
- return arr[out];
- }
- }
- public static void main(String[] args) {
- int iniSize = 3;
- MyQueue myQueue = new MyQueue(iniSize);
- myQueue.push(12);
- myQueue.push(13);
- myQueue.push(15);
- System.out.println(myQueue.pull());
- System.out.println(myQueue.pull());
- System.out.println(myQueue.pull());
- myQueue.push(23);
- myQueue.push(24);
- System.out.println(myQueue.pull());
- System.out.println(myQueue.peek());
- }
- }
- /**
- * 固定陣列實現棧結構
- * 實現方法push,pop,peek
- * 當越界的時候丟擲一個執行時異常
- * 簡單面試題
- */
- public class C01_ArrayToStack {
- public static class MyStack{
- private int size;//指標位置,也表示棧已經壓了多少
- private int[]arr;
- MyStack(int iniSize){//構造方法初始化陣列
- arr = new int[iniSize];
- size = 0;
- }
- public void push(int num){
- if(size == arr.length){
- throw new RuntimeException("棧下標越界!");
- }
- arr[size++] = num;
- }
- public int pop(){
- if(size == 0){
- throw new RuntimeException("棧中已經沒有元素可以彈出!");
- }
- return arr[--size];
- }
- public int peek(){
- if(size == 0){
- throw new RuntimeException("棧中已經沒有元素可以彈出!");
- }
- return arr[size];
- }
- }
- public static void main(String[] args) {
- int len = 13;
- MyStack myStack = new MyStack(len);
- for (int i = 0; i < len; i++) {
- myStack.push(i);
- }
- for (int i = 0; i < len; i++) {
- System.out.println(myStack.pop());
- }
- }
- }