日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

结构与算法(02):队列和栈结构

發布時間:2025/3/17 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 结构与算法(02):队列和栈结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文源碼:GitHub·點這里 || GitEE·點這里

一、隊列結構

1、基礎概念

隊列是一種特殊的線性表,特殊之處在于它只允許在表的前端(front)進行刪除操作,而在表的后端(rear)進行插入操作,和棧一樣,隊列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。

2、特點描述

隊列是一個有序列表,可以用數組或是鏈表來實現,遵循先進先出的原則。即:先進入隊列的數據,會先取出;后進入隊列的數據,要后取出;即FIFO原則。

入隊列示意圖

出隊列示意圖

通過上述兩張圖解,不難發現隊列結構的一些特點:

  • 先進入的數據先出去;
  • 數據從隊尾進入,從隊首出去;
  • 基于數組描述隊列下標變更頻繁;
  • 出隊列算法可以基于容器大小取模;

隊列結構的核心是對容器內是否空、是否滿標志的判斷算法,即容器為空不可再取,容器已滿無法再存;該算法結構在倉儲領域的適應非常廣泛。

3、消息隊列

消息隊列就是基于數據結構中的“先進先出”策略實現的,將消息以排隊的方式放入隊列中,然后出隊列被消費:

有時候某類消息消費需要有順序控制,即可以對消息中的公共ID做取模處理,即把某類消息都置于一個隊列中即可。

4、API使用案例

LinkedList類實現Queue隊列接口,因此可以基于LinkedList模擬隊列效果。

import java.util.LinkedList; import java.util.Queue;public class M01_Queue {public static void main(String[] args) {// 入隊列Queue<String> queue = new LinkedList<>();queue.add("head") ;queue.add("middle") ;queue.add("tail") ;// 當隊列出數據之后,size是不斷變化的int queueSize = queue.size() ;int loop = 0 ;// 根據隊列大小,不斷出隊列while (loop < queueSize) {System.out.println(queue.poll());System.out.println(queue);loop ++ ;}} }

二、棧結構

1、基礎概念

棧(stack)又名堆棧,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向一個棧插入新元素又稱作進棧、入棧或壓棧(push),它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧(pop),它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。

2、特點描述

棧是一個先入后出的有序列表,添加和刪除只能在棧頂端(Top)操作,另一端為固定的一端,稱為棧底(Bottom)。

入棧示意圖

出棧示意圖

通過上述兩張圖解,棧結構的一些特點如下:

  • 進棧出棧都要通過棧頂端操作;
  • 進出棧都不移動棧底指針;
  • 進出棧都要移動棧頂指針;

基于棧的定義可知,最先放入棧中元素在棧底,最后放入的元素在棧頂,從棧容器中而刪除元素剛好相反,最后放入的元素最先刪除,最先放入的元素最后刪除。

3、遞歸應用

棧在Java編程中的常見應用,(1)子程序的調用:在跳往子程序前,會將下個指令的地址存到堆棧中,直到子程序執行完后再將地址取出,退回到原來的程序中;(2)處理遞歸調用:和子程序的調用類似,除了存儲下一個指令的地址外,也要將參數、區域變量等數據存入堆棧中。

4、API使用案例

Stack棧API是Vector的一個子類,它實現了一個標準的后進先出的棧,堆棧只定義了默認構造函數,用來創建一個空棧,堆棧除了包括由Vector定義的所有方法,也定義了自己的一些方法。

import java.util.Stack;public class M02_Stack {public static void main(String[] args) {// 入堆棧Stack<String> stack = new Stack<>() ;stack.push("First") ;stack.push("Second") ;stack.push("Third") ;int stackSize = stack.size() ;int loop = 0 ;// 根據棧大小,不斷出棧while (loop < stackSize) {System.out.println(stack.pop());System.out.println(stack);loop ++ ;}} }

三、源代碼地址

GitHub·地址 https://github.com/cicadasmile/model-arithmetic-parent GitEE·地址 https://gitee.com/cicadasmile/model-arithmetic-parent

推薦閱讀:數據結構和算法

序號文章標題
01算法和結構(01):稀疏數組和二維數組轉換
02算法應用:RSA算法,加密解密,簽名驗簽流程詳解
03算法應用:遞歸算法,處理樹形結構下的業務數據
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!

總結

以上是生活随笔為你收集整理的结构与算法(02):队列和栈结构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。