算法基礎——棧

一、棧的概念

棧是?種只允許在?端進?數據插?和刪除操作線性表

  • 進?數據插?或刪除的?端稱為棧頂,另?端稱為棧底。不含元素的棧稱為空棧。
  • 進棧就是往棧中放?元素,出棧就是將元素彈出棧頂。

?

二、棧的模擬實現

1.?創建

  1. 本質還是線性表,因此可以創建?個?夠?的數組,充當棧結構
  2. 再定義?個變量 n ,?來記錄棧中元素的個數,同時還可以標記棧頂的位置。

 const int N = 1e6 + 10;int n;int stk[N];

2.?進棧

時間復雜度:

顯然是 O(1) 。?

這?依舊舍棄下標為 0 的位置,有效元素從 1 開始記錄。

進棧操作,那就把元素放在棧頂位置即可。

 // 進棧 
void push(int x){stk[++n] = x;}

3.?出棧

時間復雜度:

顯然是 O(1) 。?

不?真的刪除元素,只?將元素個數減 1 ,就相當于刪除棧頂元素。

// 出棧 
void pop(){n--;}

4. 棧頂元素

時間復雜度:

顯然是 O(1) 。?

查詢棧頂元素。

這?要注意,因為棧特殊的規定,不?持遍歷整個棧中的元素。因此,需要查找棧中元素的時候,只能查找到棧頂元素。

 // 棧頂元素
int top(){return stk[n];}

5. 判空

時間復雜度:

顯然是 O(1) 。?

判斷棧是否為空

 // 判空
bool empty(){return n == 0;}

6. 有效元素的個數

時間復雜度:

顯然是 O(1) 。

 // 棧中元素個數
int size(){return n;}

7. 所有測試代碼

#include <iostream>using namespace std;const int N = 1e5 + 10;// 創建棧
int stk[N], n;// 進棧 - 本質就是順序表里面的尾插
void push(int x)
{stk[++n] = x;
}// 出棧 - 順序表的尾刪操作
void pop()
{n--;
}// 查詢棧頂元素
int top()
{return stk[n];
}// 判斷是否為空
bool empty()
{return n == 0;
}// 查詢有效元素的個數
int size()
{return n;
}int main()
{for(int i = 1; i <= 10; i++){push(i);}// 當棧不為空的時候while(size()) // while(!empty()) {cout << top() << endl;pop();}return 0;
}

二、stack

有了之前 vector 和 list 的鋪墊,棧的使?應該會?較得?應?。

1. 如何創建?

2. 關???有什么函數?

3. 函數的功能以及時間復雜度

1.?創建

  1. stack<T> st;
  2. T 可以是任意類型的數據。

2.?size / empty

時間復雜度:?O(1)??

  1. size :返回棧?實際元素的個數;
  2. empty :返回棧是否為空。

3.?push/pop

時間復雜度:?O(1)??

  1. push :進棧;
  2. pop :出棧。

4.?top

時間復雜度:?O(1)???

top :返回棧頂元素,但是不會刪除棧頂元素。

5. 所有測試代碼

#include <iostream>
#include <stack>using namespace std;int main()
{stack<int> st;// 先講 1~10 進棧for(int i = 1; i <= 10; i++){st.push(i);}while(st.size()) // !st.empty(){cout << st.top() << endl;st.pop();}return 0;
}

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

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

相關文章

Android11至15系統定制篇

Android 11至15系統定制核心要點解析 一、Android 11關鍵定制特性 ?分區存儲強制化? 公共目錄&#xff08;如Downloads、Pictures&#xff09;與應用專屬目錄分離&#xff0c;應用更新后無法通過requestLegacyExternalStorage繞過限制?1。需申請MANAGE_EXTERNAL_STORAGE權限…

macOS 使用 enca 識別 文件編碼類型(比 file 命令準確)

文章目錄 macOS 上安裝 enca基本使用起因 - iconv關于 enca安裝 Encaenca & enconv 其它用法 macOS 上安裝 enca brew install enca基本使用 enca filepath.txt示例 $ enca 動態規劃算法.txt [0] Simplified Chinese National Standard; GB2312CRLF line terminat…

線段樹與掃描線 —— 詳解算法思想及其C++實現

目錄 一、線段樹&#xff08;Segment Tree&#xff09; 基本概念 結構 操作 示例代碼 二、掃描線&#xff08;Sweep Line&#xff09; 基本概念 應用場景 示例代碼&#xff08;矩形面積并集&#xff09; 三、總結 一、線段樹&#xff08;Segment Tree&#xff09; 基本…

匯編代碼中嵌入回調函數的優化說明

一、概述 在 PowerPC 的匯編代碼中&#xff0c;我們需要實現調用 C 函數&#xff08;例如回調函數&#xff09;&#xff0c;并傳遞參數。本文將詳細介紹如何通過一系列步驟完成這一目標&#xff0c;包括代碼示例和詳細的注釋。 二、調用 C 函數的基本步驟及代碼 1. 保存工作寄…

Uni-App 雙欄聯動滾動組件開發詳解 (電梯導航)

本文基于提供的代碼實現一個左右聯動的滾動組件&#xff0c;以下是詳細的代碼解析與實現原理說明&#xff1a; <!--雙欄聯動滾動組件 - 技術解析功能特性&#xff1a;1. 左側導航欄與右側內容區雙向聯動2. 自適應容器高度3. 平滑滾動定位4. 動態內容位置計算 --> <te…

軟考復習-傳輸介質與編碼

傳輸介質 雙絞線 傳輸距離100一200m&#xff0c;即網線&#xff0c;有多種分類 UTP非屏蔽雙絞線 STP屏蔽雙絞線 線序標準有兩種為&#xff1a; T568A標準&#xff1a;綠白、綠、橙白、藍、藍白、橙、棕白、棕 T568B標準&#xff1a;橙白、橙、綠白、藍、藍白、綠、棕白、…

論文閱讀筆記:Denoising Diffusion Probabilistic Models (3)

論文閱讀筆記&#xff1a;Denoising Diffusion Probabilistic Models (1) 論文閱讀筆記&#xff1a;Denoising Diffusion Probabilistic Models (2) 論文閱讀筆記&#xff1a;Denoising Diffusion Probabilistic Models (3) 4、損失函數逐項分析 可以看出 L L L總共分為了3項…

PyTorch 面試題及參考答案(精選100道)

目錄 PyTorch 的動態計算圖與 TensorFlow 的靜態計算圖有何區別?動態圖的優勢是什么? 解釋張量(Tensor)與 NumPy 數組的異同,為何 PyTorch 選擇張量作為核心數據結構? 什么是 torch.autograd 模塊?它在反向傳播中的作用是什么? 如何理解 PyTorch 中的 nn.Module 類?…

#C8# UVM中的factory機制 #S8.1.4# 約束的重載

今天,復習一下《UVM實戰》一書中的 關于約束的重載 章節學習。 一 問題引導 文件:src/ch8/section8.1/8.1.2/rand_mode/my_transaction.sv4 class my_transaction extends uvm_sequence_item; …17 constraint crc_err_cons{18 crc_err == 1b0;19 }20 const…

空調遙控器低功耗單片機方案

RAMSUN空調遙控器采用先進的32位低功耗單片機作為核心控制器&#xff0c;通過優化軟件算法和硬件設計&#xff0c;實現了空調遙控器的低功耗運行。單片機集成了多種功能模塊&#xff0c;包括紅外發射、按鍵掃描、電源管理等&#xff0c;有效降低了整體功耗。同時&#xff0c;該…

結構型——代理模式

結構型——代理模式 代理模式指的是通過創建一個代理來控制對原始對象的訪問。代理在客戶端與實際對象之間充當“中介” 特點 訪問控制&#xff1a;代理對象可以控制對實際對象的訪問&#xff0c;從而實現對訪問權限的控制。延遲加載&#xff1a;代理對象可以在實際對象被調…

【算法】常見排序算法(插入排序、選擇排序、交換排序和歸并排序)

文章目錄 前言一、排序概念及常見排序算法框圖1.排序概念2.常見排序算法框圖 二、實現比較排序算法1.插入排序1.1 直接插入排序1.2 希爾排序 2.選擇排序2.1 直接選擇排序2.2 堆排序 3.交換排序3.1 冒泡排序3.2 快速排序3.2.1 hoare版本3.2.2 挖坑法3.2.3 lomuto前后指針 3.3 快…

Go語言分布式鎖實戰:dlock助力構建高并發穩定系統

在構建分布式系統時&#xff0c;一個常見且棘手的問題便是資源競爭和數據一致性問題。分布式鎖作為一種常用的解決方案&#xff0c;在多個進程或節點之間協調訪問共享資源時顯得尤為重要。今天&#xff0c;我們將介紹一款分布式鎖庫——dlock&#xff0c;并通過詳細的使用示例帶…

算法方法快速回顧

&#xff08;待修改&#xff09; 目錄 1. 雙指針2. 滑動窗口理論基礎 3. 二分查找3. 二分查找理論基礎 4. KMP5. 回溯算法6. 貪心算法7. 動態規劃7.1. 01背包7.2. 完全背包7.3. 多重背包 8. 單調棧9. 并查集10. 圖論10.1. 廣度優先搜索&#xff08;BFS&#xff09;10.2. 深度優…

深度學習:讓機器學會“思考”的魔法

文章目錄 引言&#xff1a;從“鸚鵡學舌”到“舉一反三”一、深度學習是什么&#xff1f;1. 定義&#xff1a;機器的“大腦”2. 核心思想&#xff1a;從數據中“悟”出規律 二、深度學習的“大腦”結構&#xff1a;神經網絡1. 神經元&#xff1a;深度學習的基本單元2. 神經網絡…

電動自行車/電動工具鋰電池PCM方案--SH367003、SH367004、SH79F329

在消費電子系統中&#xff0c;如手機電池包&#xff0c;筆記本電腦電池包等&#xff0c;帶有控制IC、功率MOSFETFE管以及其他電子元件的電路系統稱為電池充放電保護板Protection Circuit Module &#xff08;PCM&#xff09;&#xff0c;而對于動力電池的電池管理系統&#xff…

補碼詳細分析

補碼引入 舉一個生活化的例子 假設由一個掛鐘&#xff0c;它只能順時鐘調時間&#xff0c;那么它調時間就分成了一下兩種情況 正好順時針調就能調好 如&#xff1a;時針從5調到9需要逆時針調才能調好 如&#xff1a;時針從10調到7 在上面的情況中1是不用處理的&#xff0c;2…

計算機網絡入門:物理層與數據鏈路層詳解

&#x1f310; &#xff08;專業解析 中學生也能懂&#xff01;&#xff09; &#x1f4d6; 前言 計算機網絡就像數字世界的“高速公路系統”&#xff0c;而物理層和數據鏈路層是這條公路的基石。本文用 專業視角 和 生活化比喻 &#xff0c;帶你輕松理解這兩層的核心原理&a…

哪些視頻格式在webview2中播放可以設置成透明的?

在WebView2中&#xff0c;能夠播放并設置成透明背景的視頻格式主要取決于其支持的編解碼器以及視頻是否包含alpha通道&#xff08;透明度信息&#xff09;。以下是支持透明背景的視頻格式&#xff1a; 支持透明背景的視頻格式 1. WebM&#xff08;使用VP9編解碼器&#xff09; …

【基于ROS的A*算法實現路徑規劃】A* | ROS | 路徑規劃 | Python

### 記錄一下使用Python實現ROS平臺A*算法路徑規劃 ### 代碼可自取 &#xff1a;Xz/little_projecthttps://gitee.com/Xz_zh/little_project.git 目錄 一、思路分析 二、算法實現 三、路徑規劃實現 一、思路分析 要求使用A*算法實現路徑規劃&#xff0c;可以將該任務分為三…