栈与队列理解
🔎前言
本期文章講會從之前學過的順序表,鏈表基礎上,進行棧與隊列的講述,由于博主也是學習狀態,如有不對的地方,希望多多指正!相互學習,共同進步哦!
📘 博客主頁:to Keep博客主頁
🙆歡迎關注,👍點贊,📝留言評論
?首發時間:2021年12月26日
📨 博主碼云地址:博主碼云地址
📕參考書籍:java核心技術 卷1
📢編程練習:牛客網+力扣網
文章目錄
- 🙋 棧的概念
- 👇 棧的實現(順序表實現)
- 👉判斷棧是否為空
- 👉 返回棧的長度
- ?進棧
- ?出棧
- ??獲取棧頂元素
- 🙋隊列的概念
- 👇 隊列的實現(鏈表實現)
- ?入隊列
- ?出隊列
- ??獲取隊列頭元素
- 🌱 總結
🙋 棧的概念
棧其實本質就是一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作。進行數據插入和刪除操作的一端稱為棧頂,另一端稱為棧底。棧中的元素要遵循后進先出,先進后出的原則。
👇 棧的實現(順序表實現)
👉判斷棧是否為空
public class Mystack {private int[] array = new int[50];private int size = 0;//判斷是否為空public boolean isEmpty(){return size==0;} }👉 返回棧的長度
public class Mystack {private int[] array = new int[50];private int size = 0;public int size(){return size;} }?進棧
public class Mystack {private int[] array = new int[50];private int size = 0;//進棧public void push(int val){array[size]=val;size++;} }?出棧
public class Mystack {private int[] array = new int[50];private int size = 0;//出棧public int pop(){if (!isEmpty()){int temp = array[size];size--;return temp; }else {throw new RuntimeException("空棧");}} }??獲取棧頂元素
public class Mystack {private int[] array = new int[50];private int size = 0;//獲取棧頂元素public int peek(){if (!isEmpty()){return array[size-1];}else{throw new RuntimeException("空棧");}} }🙋隊列的概念
隊列:只允許在一端進行插入數據操作,在另一端進行刪除數據操作的特殊線性表,隊列具有先進先出.
入隊列:進行插入操作的一端稱為隊尾(Tail/Rear)
出隊列:進行刪除操作的一端稱為隊頭
👇 隊列的實現(鏈表實現)
隊列中的判斷是否為空與獲取隊列的長度是與棧一樣的,這里就不在進行重復的書寫
?入隊列
class node{public node next;public int val;public node(int val){this.val=val;} } public class Myqueue {public node head;private node tail;private int size;//判斷是否為空public boolean isEmpty(){return size == 0;}//獲取隊列的長度public int size(){return size;}//入隊列public void enquene(int val){node cur = new node(val);if (head==null){head=cur;}else{tail.next=cur;}tail=cur;size++;} }?出隊列
//出隊列public int dequene(){if (size==0){throw new RuntimeException("空隊列");}node oldhead = head;head=head.next;if(head==null){tail=null;//如果頭結點為空,那么尾節點也是不能有任何指向的}size--;return oldhead.val;}??獲取隊列頭元素
//獲取隊列頭元素public int peek(){if (size==0){throw new RuntimeException("空隊列");}return head.val;}🌱 總結
無論是棧還是隊列,其實主要就是要掌握它們底層的數據結構,鏈表以及順序表才是關鍵。另外這些知識基本的原理,下一步預計就是得去刷些棧與隊列的習題進行鞏固。
總結
- 上一篇: java中异常处理机制
- 下一篇: 二叉树的基本概念以及基本操作