數據結構03棧和隊列

第三章棧和隊列

STL
棧:stack?http://blog.csdn.net/weixin_37289816/article/details/54773495
隊列:
queue ?http://blog.csdn.net/weixin_37289816/article/details/54773581
priority_queue ?http://blog.csdn.net/weixin_37289816/article/details/54773592
dequeue ?http://blog.csdn.net/weixin_37289816/article/details/54729516

從數據結構角度看,棧和隊列也是線性表。

棧和隊列的基本操作是線性表操作的子集,它們是操作受限的線性表。

3.1 棧 stack

限定僅在表尾進行插入和刪除操作的線性表。

表尾端 --> 棧頂 top

表頭端 --> 棧底 bottom

后進先出 LIFO??last in first out

插入元素 --> 入棧

刪除元素 --> 出棧

?

順序棧

非空棧中的棧頂指針始終在棧頂元素的下一個位置。

3.2 棧的應用舉例

3.2.1 數制轉換

3.2.2 括號匹配檢驗

可用“期待的緊迫程度”這個概念來描述。

在算法中設置一個棧;

1、每讀入一個括號,若是右括號,則或者使置于棧頂的最急迫的期待得以消解,或者是不合法的情況;

2、若是左括號,則作為一個新的更急迫的期待壓入棧中,自然使原有的在棧中的所有未消解的期待的緊迫性都降了一級;

算法開始和結束時,棧都應該是空的。

?

3.2.3 行編輯程序

遇#退棧

遇@清棧

遇換行輸出棧

?

3.2.4 迷宮求解

棧中所存信息為,坐標+步數+搜尋方向

墻-1

可走0

當前判斷的位置與棧頂元素有關

?

3.2.5 表達式求值

表達式求值算法:

使用兩個工作棧:1、運算符棧,2、操作數棧。

基本思想:

1、首先置操作數棧為空棧,表達式起始符“#”為運算符棧的棧底元素;

2、依次讀入表達式的每個字符,若是操作數則進操作數棧,若是運算符,則和運算符棧的棧頂運算符比較優先權后作相應操作,直至整個表達式求值完畢。棧頂高則計算,棧頂低則壓棧。

符號 + - * / ( )

棧頂

+ ?> ?+ - )

- ?> ?+ - )

* ?> ?* / + - )

/ ?> ?* / + - )

( ?< all ?= )

?

3.3 棧與遞歸的實現

棧:函數調用

調用函數和被調用函數之間的鏈接及信息交換需通過棧來進行

?

遞歸函數

函數中有直接或間接調用自身函數的語句

條件:1、降階;2、有出口。

編譯軟件開辟的棧空間是有限的,當遞歸調用時,嵌套的層次往往很多,可能發生棧溢出的現象。

?

3.4 隊列

隊列 queue:先進先出(First In First Out,FIFO)的線性表。

在表的一端進行插入,而在另一端刪除元素。

隊尾 rear:允許插入的一端

隊頭 front:允許刪除的一端

?

典型例子:操作系統中的作業排隊

雙端隊列:限定插入和刪除操作在表的兩端進行的線性表。

兩端插入,一端刪除;

兩端刪除,一端插入;

從插入端刪除(棧底相連的棧)。

?

順序隊列(循環隊列):

初始化建空隊列時,令front=rear=0

插入隊尾,尾指針增1

刪除隊頭,頭指針增1

在非空隊列中,頭指針始終指向隊列頭元素,而尾指針始終指向隊列尾的下一個位置

?

循環隊列:

1、另設一個標志位以區別隊列是空還是滿;

2、少用一個元素空間,約定以“隊列頭指針在隊列尾指針的下一位置”作為隊列呈滿的標志。

頭尾指針對存儲空間MAX_QSIZE求余,形成循環隊列。

?

如果用戶的應用程序中設有循環隊列,則必須為它設定一個最大隊列長度;

若用戶無法預估所用隊列的最大長度,則采用鏈隊列。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387215.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387215.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387215.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java動態編譯執行

在某些情況下&#xff0c;我們需要動態生成java代碼&#xff0c;通過動態編譯&#xff0c;然后執行代碼。JAVA API提供了相應的工具&#xff08;JavaCompiler&#xff09;來實現動態編譯。下面我們通過一個簡單的例子介紹&#xff0c;如何通過JavaCompiler實現java代碼動態編譯…

樹莓派pwm驅動好盈電調及伺服電機

本文講述如何通過樹莓派的硬件PWM控制好盈電調來驅動RC車子的前進后退&#xff0c;以及如何驅動伺服電機來控制車子轉向。 1. 好盈電調簡介 車子上的電調型號為&#xff1a;WP-10BLS-A-RTR&#xff0c;在好盈官網并沒有搜到對應手冊&#xff0c;但找到一份通用RC競速車的電調使…

數據結構04串

第四章 串 STL&#xff1a;string http://blog.csdn.net/weixin_37289816/article/details/54716009計算機上非數值處理的對象基本上是字符串數據。 在不同類型的應用中&#xff0c;字符串具有不同的特點&#xff0c;要有效的實現字符串的處理&#xff0c;必須選用合適的存儲…

CAS單點登錄原理解析

CAS單點登錄原理解析 SSO英文全稱Single Sign On&#xff0c;單點登錄。SSO是在多個應用系統中&#xff0c;用戶只需要登錄一次就可以訪問所有相互信任的應用系統。CAS是一種基于http協議的B/S應用系統單點登錄實現方案&#xff0c;認識CAS之前首先要熟悉http協議、Session與Co…

JDK1.6版添加了新的ScriptEngine類,允許用戶直接執行js代碼。

JDK1.6版添加了新的ScriptEngine類&#xff0c;允許用戶直接執行js代碼。在Java中直接調用js代碼 不能調用瀏覽器中定義的js函數&#xff0c;會拋出異常提示ReferenceError: “alert” is not defined。[java] view plaincopypackage com.sinaapp.manjushri; import javax.sc…

數據結構05數組和廣義表

第五章 數組 和 廣義表 數組和廣義表可以看成是線性表在下述含義上的擴展&#xff1a;表中的數據元素本身也是一個數據結構。 5.1 數組的定義 n維數組中每個元素都受著n個關系的約束&#xff0c;每個元素都有一個直接后繼元素。 可以把二維數組看成是這樣一個定長線性表&…

k8s的ingress使用

ingress 可以配置一個入口來提供k8s上service從外部來訪問的url、負載平衡流量、終止SSL和提供基于名稱的虛擬主機。 配置ingress的yaml&#xff1a; 要求域名解析無誤 要求service對應的pod正常 一、test1.domain.com --> service1:8080 apiVersion: extensions/v1beta1…

JDK1.8中如何用ScriptEngine動態執行JS

JDK1.8中如何用ScriptEngine動態執行JS jdk1.6開始就提供了動態腳本語言諸如JavaScript動態的支持。這無疑是一個很好的功能&#xff0c;畢竟Java的語法不是適合成為動態語言。而JDK通過執行JavaScript腳本可以彌補這一不足。這也符合“Java虛擬機不僅僅是Java一種語言的虛擬機…

數據結構06樹和二叉樹

第六章 樹和二叉樹 6.1 樹的定義和基本術語 樹 Tree 是n個結點的有限集。 任意一棵非空樹中&#xff1a; &#xff08;1&#xff09;有且僅有一個特定的稱為根&#xff08;root&#xff09;的結點&#xff1b; &#xff08;2&#xff09;當n>1時&#xff0c;其余結點可…

2019.03.20 mvt,Django分頁

MVT模式 MVT各部分的功能: M全拼為Model&#xff0c;與MVC中的M功能相同&#xff0c;負責和數據庫交互&#xff0c;進行數據處理。 V全拼為View&#xff0c;與MVC中的C功能相同&#xff0c;接收請求&#xff0c;進行業務處理&#xff0c;返回響應。 T全拼為Tem…

CountDownLatch,CyclicBarrier和Semaphore

在java 1.5中&#xff0c;提供了一些非常有用的輔助類來幫助我們進行并發編程&#xff0c;比如CountDownLatch&#xff0c;CyclicBarrier和Semaphore&#xff0c;今天我們就來學習一下這三個輔助類的用法。以下是本文目錄大綱&#xff1a;一.CountDownLatch用法二.CyclicBarrie…

數據結構07排序

第十章內部排序 10.1 概述 排序就是把一組數據按關鍵字的大小有規律地排列。經過排序的數據更易于查找。 排序前KiKj&#xff0c;且Ki在前: 排序方法是穩定的&#xff0c;若排序后Ki在前&#xff1b; 排序方法是不穩定的&#xff0c;如排序后Kj在前。 分類&#xff1a; 內…

數據結構08查找

第九章 查找 另一種在實際應用中大量使用的數據結構--查找表。 所謂查找&#xff0c;即為在一個含有眾多的數據元素的查找表中找出某個“特定的”數據元素。 查找表 search table 是由同一類型的數據元素構成的集合。集合中的數據元素之間存在著完全松散的關系&#xff0c;故…

下載Centos7 64位鏡像

下載Centos7 64位鏡像 1.打開Centos官網 打開Centos官方網站地址&#xff1a;https://www.centos.org/&#xff0c;點擊Get CentOS Now 2.點擊Minimal ISO鏡像 Minimal ISO鏡像&#xff0c;與DVD ISO鏡像的差別有很多&#xff0c;這里只說兩點 1.Minimal ISO類似于Windows的純凈…

[Objective-C語言教程]結構體(17)

Objective-C數組可定義包含多個相同類型的數據項的變量類型&#xff0c;但結構體是Objective-C編程中的另一個用戶定義數據類型&#xff0c;它可組合不同類型的數據項。 結構體用于表示記錄&#xff0c;假設要圖書館中跟蹤書籍信息。可能希望跟蹤每本書的以下屬性 - 標題作者學…

Scala01入門

第1章 可伸展的語言 Scala應用范圍廣&#xff0c;從編寫腳本&#xff0c;到建立大型系統。 運行在標準Java平臺上&#xff0c;與Java庫無縫交互。 更能發揮力量的地方&#xff1a;建立大型系統或可重用控件的架構。 將面向對象和函數式編程加入到靜態類型語言。 在Scala中&a…

架構師之路17年精選80篇

【架構必備】 《互聯網架構如何實現“高并發”》4W 《TCP接入層的負載均衡、高可用、擴展性架構設計》2.2W 《配置中心架構設計演進》1.7W 《跨公網調用的大坑與架構優化》1.4W 《DNS在架構設計中的巧用》1.9W 《消息如何在網絡上安全傳輸》1.2W 《10W定時任務&#xff0c;如何…

iphone手機型號獲取

#import <sys/utsname.h> //手機型號 NSString *device [self iphoneType]; (NSString *)iphoneType { struct utsname systemInfo; uname(&systemInfo); NSString *platform [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; if…

Java網絡01基本網絡概念

協議 Protocol&#xff1a;明確規則 &#xff08;1&#xff09;地址格式&#xff1b; &#xff08;2&#xff09;數據如何分包&#xff1b; ... TCP/IP四層模型&#xff1a; 應用層 HTTP SMTP POP IMAP 傳輸層 TCP UDP 網際層 IP 主機網絡層 host to host layer 數模、…

apache的產品分類說明

分類 項目名 說明 開發語言 服務器&#xff08;共20&#xff09; Apache HTTP Server全球第一HTTP服務器C/CTomcatJava的Web服務器JavaJames郵件服務器JavaSpamAssassin反垃圾郵件C/CPerlApache的Perl編程語言支持C/CTclTCL腳本語言C/CDirectory Server超級目錄服務器JavaAxisW…