網站首頁 編程語言 正文
1.棧的介紹
棧的實現方式分為3種
- 基于靜態數組實現,內部預設一個很大的數組對象, 實現簡單,缺點是空間受限。
- 基于動態數組實現,內部預設一個容量值,然后分配一段內存空間數組,如果入棧大于默認容量值時,則再次擴大分配新的內存數組,并將舊數組拷貝至新數組及釋放舊數組.
- 基于雙向循環鏈表實現
棧的函數需要實現如下所示:
-
T pop() :?
出棧并返回棧頂元素 -
void??push(const T &t) :
?入棧? -
const T & top() const :
?獲取const類型棧頂元素 -
T &top() :?
獲取棧頂元素 -
int length() const:?
獲取數量(父類已經實現)void clear():?清空棧(父類已經實現)
本章,我們實現的棧基于動態數組實現,它的父類是我們之前實現的Vector類:
C++?動態數組模版類Vector實例詳解
所以代碼實現會非常簡單.
2.棧實現
代碼如下所示:
#ifndef Stack_H #define Stack_H #include "throw.h" // throw.h里面定義了一個ThrowException拋異常的宏,如下所示: //#include//using namespace std; //#define ThrowException(errMsg) {cout<<__FILE__<<" LINE"<<__LINE__<<": "< class Stack : public Vector { public: T pop() { if(Vector ::isEmpty()) { // 如果棧為空,則拋異常 ThrowException("Stack is empty ..."); } T t = Vector ::data()[Vector ::length() - 1]; Vector ::resize(Vector ::length() - 1); return t; } // 入棧,實際就是append尾部添加成員 void push(const T &t) { Vector ::append(t); } T &top() { if(Vector ::isEmpty()) { ThrowException("Stack is empty ..."); } return Vector ::data()[Vector ::length() - 1]; } const T &top() const { if(Vector ::isEmpty()) { ThrowException("Stack is empty ..."); } return Vector ::data()[Vector ::length() - 1]; } }; #endif // Stack_H
3.代碼測試
int main(int argc, char *argv[]) { Stackstack; cout<<"******* current length:"<
運行打印:
總結
原文鏈接:https://blog.csdn.net/qq_37997682/article/details/123123143
相關推薦
- 2022-04-27 ASP.NET?Core中的策略授權和ABP授權_實用技巧
- 2022-05-27 python中torch.nn.identity()方法詳解_python
- 2023-04-01 Rust利用tauri制作個效率小工具_Rust語言
- 2023-03-23 React?Native中WebView與html雙向通信遇到的坑_React
- 2022-04-24 torch.utils.data.DataLoader與迭代器轉換操作_python
- 2022-03-11 C++實操之內聯成員函數介紹_C 語言
- 2022-06-14 Flutter網絡請求Dio庫的使用及封裝詳解_Android
- 2022-11-23 Android集成GreenDao數據庫的操作步驟_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支