網站首頁 編程語言 正文
公眾號:Coder梁(ID:Coder_LT)
我們在學數據結構的時候,經常遇到的一個概念就是抽象數據類型(Abstract Data Type),簡稱ADT。
維基百科中的定義是:抽象數據類型是計算機科學中具有類似行為的特定類別的數據結構的數學模型,或者具有類似語義的一種或多種程序設計語言的數據類型。
從這段定義來看,非常地費解,其實我們只需要抓住核心。核心就是接口和實現的分離。我們在使用一個ADT的時候,只需要和接口進行交互,而不必關心接口中的實現細節。同樣,數據也是隱藏不可見的,也需要通過接口進行交互。
也就是說接口是數據類型唯一的交互方式,除此之外,用戶無法接觸到ADT的數據以及實現細節。
舉個例子:以棧舉例,如果我們不將棧設計成ADT,那么用戶在使用棧的時候,可能就需要自己創建一個數組來存儲棧中的數據,通過調用一些方法來實現棧的功能。但這勢必需要用戶了解棧的原理,以及數據存儲的細節。ADT會做一個良好的封裝,用戶只需要了解每個接口的功能,調用對應的接口實現自己想要的邏輯即可。
我們來看一下C++ Primer當中實現的棧的例子。
首先,我們需要知道棧一共有哪些接口,大概有如下這么幾個:
- 創建空棧
- 可添加數據到棧頂
- 可從棧頂彈出數據
- 可查看棧是否為空
- 可查看棧是否已滿
然后,我們遵守C++
中面向對象的設計思路,將它封裝在一個類當中。
首先我們來定義這個類:
#ifndef STACK__H_ #define STACK__H_ typedef unsigned long Item; class Stack { ?private: ? ? ? ? enum {MAX=10}; ? ? ? ? Item items[MAX]; ? ? ? ? int top; ? ? public: ? ? ?Stack(); ? ? ?bool isempty() const; ? ? ?bool isfull() const; ? ? ?bool push(const Item &item); ? ? ?bool pop(Item &item); }; #endif
我們來看下這個定義,會發現,其中的數據都被設定成了private
,也就是用戶無法直接訪問到數據。只能通過public
的接口進行交互,也無須關心其中的實現細節,可以當做黑盒使用。
最后, 我們再來看下C++ Primer當中給出的實現:
#include "stack.h" Stack::Stack() { ? ? top = 0; } bool Stack::isempty() const { ? ? return top == 0; } bool Stack::isfull() const { ? ? return top == MAX; } bool Stack::push(const Item &item) { ? ? if (top < MAX) { ? ? ? ? items[top++] = item; ? ? ? ? return true; ? ? } ? ? return false; } bool Stack::pop(Item &item) { ? ? if (top > 0) { ? ? ? ? item = items[--top]; ? ? ? ? return true; ? ? } ? ? return false; }
- 上一篇:C++類常量和類枚舉_C 語言
- 下一篇:C++運算符重載詳情介紹_C 語言
相關推薦
- 2022-04-25 C#使用NPOI設置Excel下拉選項_C#教程
- 2022-11-12 C++設計與實現ORM系統實例詳解_C 語言
- 2022-09-06 Redis數據結構SortedSet的底層原理解析_Redis
- 2022-04-10 python?tkinter實現簡單計算器功能_python
- 2023-01-07 Android開發X?Y軸Board的繪制教程示例_Android
- 2022-05-13 python實現圖書館借閱系統_python
- 2022-06-19 Python?matplotlib實現條形統計圖_python
- 2022-10-13 Python中?whl包、tar.gz包的區別詳解_python
- 最近更新
-
- 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同步修改后的遠程分支