***:coder梁(id:coder_lt)
我們在學資料結構的時候,經常遇到的乙個概念就是抽象資料型別(abstract data type),簡稱adt。
維基百科中的定義是:抽象資料型別是電腦科學中具有類似dvipsvkx行為的特定類別的資料結構的數學模型,或者具有類似語義的一種或多種程式語言的資料型別。
從這段定義來看,非常地費解,其實我們只需要抓住核心。核心就是介面和實現的分離。我們在使用乙個adt的時候,只需要和介面進行互動,而不必關心介面中的實現細節。同樣,資料也是隱藏不可見的,也需要通過介面進行互動。
也就是說介面是資料型別唯一的互動方式,除此之外,使用者無法接觸到adt的資料以及實現細節。
舉個例子:以棧舉例,如果我們不將棧設計成adt,那麼使用者在使用棧的時候,可能就需要自己建立乙個陣列來儲存棧中的資料,通過呼叫一些方法來實現棧的功能。但這勢必需要使用者了解棧的原理,以及資料儲存的細節。adt會做乙個良好的封裝,使用者只需要了解每個介面的功能,呼叫對應的介面實現自己想要的邏輯即可。
我們來看一下c++ primer當中實現的棧的例子。
首先,我們需要知道棧一共有哪些介面,大概有如下這麼幾個:
然後,我們遵守c++中物件導向的設計思路,將它封裝在乙個類當中。
首先我們來定義這個類:
#ifndef stack__h_
#define stack__h_
typedef unsigned long item;
class stack ;
item items[max];
int top;
public:
stack();
bool isempty() const;
bool isfull() const;
bool push(const item &item);
bool pop(item &item);
};#endif
我們來看下這個定義,會發現,其中的資料都dvipsvkx被設定成了private,也就是使用者無法直接訪問到資料。只能通過public的介面進行互動,也無須關心其中的實現細節www.cppcns.com,可以當做黑盒使用。
最後, 我們再來看下c++ primer當中給出的實現:
#include "stack.h"
stack::stack()
bool stack::isempty() const
bool stack::isfull() const
bool stack::push(const item &item)
return false;
}bool stack::pop(item &item)
return false;
}
c 抽象資料型別
include class shape virtual shape virtual long getarea error virtual long getperim virtual void draw class circle public shape circle long getarea lon...
抽象資料型別
本篇文章簡單的講解下表 棧 佇列。首先先了解一下什麼是抽象資料型別。它是這麼定義的 抽象資料型別 abstract data type,即adt 是帶有一組操作的一些物件的集合。那麼adt怎麼理解呢?首先你只需要記住表 集合 圖以及與他們各自的操作一起形成的物件都可以被看做抽象資料型別.這就跟整型 ...
抽象資料型別 表
資料結構與演算法分析.c 實現 總結 抽象資料型別 abstract data type,首先顧名思義,她是一種資料型別,就像整數 字元,類似於加減乘除,他有自己的操作,例如 並和查詢 並沒有什麼法則規定一定要有什麼操作,具體的看設計要求 每種資料型別的實現方式也是不同的,主要有 陣列實現和鍊錶實現...