陣列實現固定大小佇列和棧
阿新 • • 發佈:2018-12-19
棧的資料結構是先進後出,佇列的資料結構是先進先出。
陣列實現固定大小棧的思想是:先建立一個固定大小的陣列和一個size為0的常數,這個常數用來判斷棧是否滿或者空。當push時,檢視size的大小是否為大於陣列的長度,大於就給使用者拋異常,否則就插入陣列的size位置,size++。而pop的時候相反,檢視size的大小是否為小於陣列的長度,小於就給使用者拋異常,否則就把size-1的位置給彈出,size=size-1。獲取棧頂元素就直接返回陣列的size-1位置的數。
陣列實現固定大小佇列的思想是:建立一個固定大小的陣列和三個常數,size作用是計算插入佇列的個數,last的作用是插入佇列時使用,first的作用是彈出佇列時使用。插入佇列時先判斷size是否為陣列的長度,相等就不能插入佇列,否則就size的大小加一,把數插入到陣列的last位置,再判斷last的值是否為陣列大小減1,是的話就給last賦值為0,否則last自加1。彈出佇列也要先判斷size是否為0,為0則不能彈出,否則就size自減1,first位置上的值彈出,再給first賦值,若first值為陣列長度減1,則賦值為0,否則first自加1。佇列頭部的值就為first位置上的值。
程式碼如下:
public class Array_To_Stack_Queue { public static void main(String[] args) { } public static class ArrayStack{ private Integer[] arr; private Integer size; //固定大小的棧 public ArrayStack(int initSize) { if(initSize < 0) { throw new IllegalArgumentException("The init size is less than 0"); } arr = new Integer[initSize]; size = 0; } //返回棧頂元素 public Integer peek() { if(size == null) { return null; } return arr[size - 1]; } //進棧操作 public void push(int obj) { if(size == arr.length) { throw new ArrayIndexOutOfBoundsException("The queue is full"); } arr[size++] = obj; } //出棧操作 public Integer pop() { if(size == 0) { throw new ArrayIndexOutOfBoundsException("The queue is empty"); } return arr[--size]; } } public static class ArrayQueue { private Integer[] arr; private Integer size; private Integer first; private Integer last; public ArrayQueue(int initSize) { if(initSize < 0) { throw new IllegalArgumentException("The init size is less than 0"); } arr = new Integer[initSize]; size = 0; first = 0; last = 0; } //獲取隊頭的值 public Integer peek() { if(size == 0) { return null; } return arr[first]; } //插入佇列 public void push(int obj) { if (size == arr.length) { throw new ArrayIndexOutOfBoundsException("The queue is full"); } size++; arr[last] = obj; last = last == arr.length - 1 ? 0 : last + 1; } //彈出佇列 public Integer poll() { if(size == 0) { throw new ArrayIndexOutOfBoundsException("The queue is empty"); } size--;//佇列的個數減一 int tmp = first; first = first == arr.length - 1 ? 0 : first + 1; return arr[tmp]; } } }