stack堆棧簡介

stack堆棧簡介

??? 堆棧是一個線性表,插入和刪除只在表的一端進行。這一端稱為棧頂(Stack Top),另一端則為棧底(Stack Bottom)。堆棧的元素插入稱為入棧,元素的刪除稱為出棧。由于元素的入棧和出棧總在棧頂進行,因此,堆棧是一個后進先出(Last In First Out)表,即 LIFO 表。
?? ?C++ STL 的堆棧泛化是直接通過現有的序列容器來實現的,默認使用雙端隊列deque的數據結構,當然,可以采用其他線性結構(vector 或 list等),只要提供堆棧的入棧、出棧、棧頂元素訪問和判斷是否為空的操作即可。由于堆棧的底層使用的是其他容器,因此,堆棧可看做是一種適配器,將一種容器轉換為另一種容器(堆棧容器)。
?? ?為了嚴格遵循堆棧的數據后進先出原則,stack 不提供元素的任何迭代器操作,因此,stack 容器也就不會向外部提供可用的前向或反向迭代器類型。
?? ?stack堆棧容器的C++標準頭文件為 stack ,必須用宏語句 "#include <stack>" 包含進來,才可對 stack 堆棧的程序進行編譯。
???

創建 stack 對象
使用堆棧前,先要利用構造函數進行初始化,創建一個堆棧對象,以進行元素的入棧、出棧等操作。
1.?? ?stack()
?? ?默認構造函數,創建一個空的 stack 對象。
?? ?例如,下面一行代碼使用默認的 deque 為底層容器,創建一個空的堆棧對象 s 。
?? ?stack<int>? s;
?? ?
2.?? ?stack(const stack&)
?? ?復制構造函數,用一個 stack 堆棧創建一個新的堆棧。
?? ?例如,下面的代碼利用 s1 ,創建一個以雙向鏈表為底層容器的空堆棧對象 s2 。
?? ?// stack<int, list<int> >?? s1;
?? ?stack<int, list<int> >?? s2(s1);
?? ?


元素入棧
?? ?stack堆棧容器的元素入棧函數為 push 函數。由于 C++ STL 的堆棧函數是不預設大小的,因此,入棧函數就不考慮堆棧空間是否為滿,均將元素壓入堆棧,從而函數沒有標明入棧成功與否的返回值。
?? ?如下是他的使用原型:
?? ?void? push(const value_type& x)
?? ?
?? ?
元素出棧
?? ?stack容器的元素出棧函數為 pop 函數,由于函數并沒有判斷堆棧是否為空,才進行元素的彈出,因此,需要自行判斷堆棧是否為空,才可執行 pop 函數。
?? ?void pop()
?? ?
?? ?下面的示例代碼,將堆棧的所有元素全部出棧
?? ?// stack<int>? s;
?? ?while(!s.empty())
?? ?{?
?? ??? ?s.pop();// 出棧
?? ?}
?? ?
?? ?
取棧頂元素
?? ?stack容器的棧頂元素的讀取函數為 pop 函數,將取出最后入棧的元素,如下是它的使用原型
?? ?value_type&? top()

堆棧非空判斷
?? ?隨著堆棧元素不斷出棧,堆棧可能會出現空的情況,因此,一般需要調用 empty 函數判斷是否非空,才作元素出棧和取棧頂元素的操作。
?? ?bool? empty()
?? ?判斷堆棧是否為空,返回 true 表示堆棧已空,false 表示堆棧非空。

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

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

相關文章

一份從 0 到 1 的 Java 項目實踐清單

2019獨角獸企業重金招聘Python工程師標準>>> 看了一篇文章&#xff0c;感覺還可以&#xff0c;就給大家共享一下&#xff1a; 對于著手一個項目的時候&#xff0c;要從以下入手&#xff08;即項目清單&#xff09;&#xff1a; 1. 項目規劃 1.1 首先&#xff0c;你得…

JWT 簡介

JWT是一種用于雙方之間傳遞安全信息的簡潔的、URL安全的表述性聲明規范。JWT作為一個開放的標準&#xff08;RFC 7519&#xff09;&#xff0c;定義了一種簡潔的&#xff0c;自包含的方法用于通信雙方之間以Json對象的形式安全的傳遞信息。因為數字簽名的存在&#xff0c;這些信…

FFMPEG的詳細資料可以在它的官方網站上找到

請看官網的文檔欄目: http://ffmpeg.mplayerhq.hu/documentation.html FFmpeg System Documentation Frequently Asked QuestionsFFmpeg program documentationffserver documentationffplay documentationvideo hook documentationsample ffserver configuration fileFFmpeg A…

空指針入棧問題

空指針和數據元素一樣能夠進棧。并且如果棧原來為空&#xff0c;壓入空指針后棧就不會為空了。空指針一旦被賦予指針&#xff0c;如果是在32位機上則占四個字節。只不過是沒有指向堆內存中的任何數據。而空指針已經壓進棧了&#xff0c;不加以釋放就一直存在。

arm linux 中斷 分析,armlinux中斷異常的處理分析.pdf

基于 ARM Linux 中斷、異常的處理分析本文是基于ARM S3C2410X 系統的Linux 2.6 中斷、異常和系統調用的處理分析。主要有以下幾個部分&#xff1a;1. ARM 的硬件中斷機制2. Linux 2.6 對 ARM 中斷向量表的初始化3. Linux 2.6 對 ARM 中斷、異常的處理(從匯編-->C 語言函數&a…

(數據科學學習手札03)Python與R在隨機數生成上的異同

隨機數的使用是很多算法的關鍵步驟&#xff0c;例如蒙特卡洛法、遺傳算法中的輪盤賭法的過程&#xff0c;因此對于任意一種語言&#xff0c;掌握其各類型隨機數生成的方法至關重要&#xff0c;Python與R在隨機數底層生成上都依靠梅森旋轉&#xff08;twister&#xff09;來生成…

音視頻編解碼知識學習詳解(分多部分進行詳細分析)

1. 常用的基本知識 基本概念 編解碼 編解碼器&#xff08;codec&#xff09;指的是一個能夠對一個信號或者一個數據流進行變換的設備或者程序。這里指的變換既包括將信號或者數據流進行編碼&#xff08;通常是為了傳輸、存儲或者加密&#xff09;或者提取得到一個編碼流的操作…

二叉樹非遞歸后序遍歷算法

與正常的非遞歸中序遍歷算法不同于兩點&#xff1a; 一 比正常的中序遍歷算法多了對數據元素的標記。 在壓數據元素入棧&#xff08;標記記為0&#xff0c;用來表示訪問了其左子樹&#xff09;時標記&#xff0c; 還有訪問完左子樹利用gettop&#xff08;&#xff09;獲取雙親…

SQL*Plus命令

SQL*Plus命令 前言 一&#xff1a;SQL*Plus 與數據庫的交互 二&#xff1a;設置SQL* Plus的運行環境 二 - 1 &#xff1a;SET命令概述 二 - 2 &#xff1a;使用SET命令設置運行環境 二 - 2 ____1&#xff1a;Pagesize 變量 1 SYSorcl> show pagesize2 pages…

redis-day1

1 Redis 概述 REmote DIctionary Server(Redis)是一個基于key-value鍵值對的持久化數據庫存儲系統。redis和大名鼎鼎的Memcached緩存服務軟件很像&#xff0c;但是Redis支持的數據存儲類型比Memcached更豐富&#xff0c;包括strings&#xff08;字符串&#xff09;、lists&…

C語言數碼管是共陰共陽程序,C語言實現共陰極數碼管操作

共陰極或者共陽極數碼管&#xff0c;因為其需要電流大&#xff0c;而一般51輸出電流低&#xff0c;需要鎖存器。買的開發板使用的共陰極數碼管。至于其構造&#xff0c;找個相關方面的書看看&#xff0c;這里主要是對做好的電路板進行編程。剛開始的時候&#xff0c;感覺在數碼…

數據庫主要特點

(1)實現數據共享。數據共享包含所有用戶可同時存取數據庫中的數據&#xff0c;也包括用戶可以用各種方式通過接口使用數據庫&#xff0c;并提供數據共享。 (2)減少數據的冗余度。同文件系統相比&#xff0c;由于數據庫實現了數據共享&#xff0c;從而避免了用戶各自建立應用文…

百度與華為全面戰略合作 人工智能手機真的要來了

視頻加載中...12月21日百度和華為在北京宣布達成全面戰略合作。這次合作內容主要包括三點&#xff0c;首先是在語音、語義、視覺和VR上的自然交互&#xff0c;這是百度為華為手機AI賦能的基礎層。第二是基于華為HiAI平臺和百度PaddlePaddle深度學習框架&#xff0c;共建人工智能…

JavaScript數據類型

一、JavaScript數據類型主要分為原始類型和引用數據類型。 原始類型包括(不可拆分的東西)&#xff1a;Number、String、Boolean、Null、Undefined。引用數據類型包括&#xff1a;Object&#xff08;Array&#xff0c;Date&#xff0c;RegExp&#xff0c;Function&#xff09;ty…

funcode拼圖游戲c語言程序,同求funcode平臺下拼圖游戲的C語言代碼

做了好幾天&#xff0c;寫了好多回就是不對&#xff0c;徹底崩潰。。#include "CommonAPI.h"//#include "LessonX.h"#include#define BLOCK_COUNT 4int g_iGameState;intg_iBlockState[BLOCK_COUNT][BLOCK_COUNT];charg_szBlockName[BLOCK_COUNT*BLOCK_COU…

什么是透明傳輸

透明傳輸是指不管所傳數據是什么樣的比特組合&#xff0c;都應當能夠在鏈路上傳送。當所傳數據中的比特組合恰巧與某一個控制信息完全一樣時&#xff0c;就必須采取適當的措施&#xff0c;使收方不會將這樣的數據誤認為是某種控制信息。這樣才能保證數據鏈路層的傳輸是透明的。…

Android 秒級編譯FreeLine

項目地址&#xff1a;FreeLine FreeLine官網: FreeLine 1. 安裝FreeLine插件 File->Settings->Plugins, 搜索輸入FreeLine Plugin, 查找到后進行安裝并重啟Android Studio。 圖1.png安裝好之后&#xff0c;在工具欄就會出一個圖標 圖2.png2. 配置gradle 根目錄build.gr…

JS實現大整數乘法(性能優化、正負整數)

本方法的思路為&#xff1a; 一&#xff1a;檢查了輸入的合法性&#xff08;非空&#xff0c;無非法字符&#xff09; 二&#xff1a;檢查輸入是否可以進行簡單計算&#xff08;一個數為 0&#xff0c;1&#xff0c;1&#xff0c;-1&#xff09; 三&#xff1a;去掉輸入最前面可…

c語言中- gt he,C語言中deta,fabs,lt;stdlib.hgt;,lt;stdio.hgt;分別是什么意思

fabs 編輯本段C語言數學函數:fabs 函數簡介  原型&#xff1a;在TC中原型是extern float fabs(float x);&#xff0c;在VC6.0中原型是double fabs( double x );。   用法&#xff1a;#include   功能&#xff1a;求浮點數x的絕對值   說明&#xff1a;計算|x|, 當x不為…

物理層

目的&#xff1a; 物理層要盡可能地屏蔽掉物理設備和傳輸媒體&#xff0c;通信手段的不同&#xff0c;使數據鏈路層感覺不到這些差異&#xff0c;只考慮完成本層的協議和服務。 給其服務用戶&#xff08;數據鏈路層&#xff09;在一條物理的傳輸媒體上傳送和接收比特流…