抽象數據類型

1.相關術語
抽象數據類型:ADT 指一個用數學模型以及定義在此數學模型上的一組操作。通過高級語言的已有數據類型實現,定義域,類型,,接口,實現,不公開實現的細節。
定義域:由值組成的集合,描述取值範圍。
接口:用於溝通的中介物的抽象化。
順序查找:在無序數組中按順序查找的算法。
線性查找:在一列給定的值中進行搜索,從一端開始逐一檢查每個元素,直到找到所需元素,又稱爲順序查找。

2.在數據集中查找給定值
線性查找:數組版本

int LinearSearch(int k,const int data[],int N)
{
    //輸入:k-待查值;data-數據集;N-數據集長度。
    //const 固定結構
    //輸出:利用return語句返回。
for(int pos=o\0;pos<N;pos++)
    if(data[pos]==k)
    return pos;//找到k,返回位置信息。
return N;//未找到k,返回N.
}

一:長度受限
以上的代碼段缺點明顯,數組的長度受到限制。
引入一個新的概念以解決如上問題。
容器:vector–抽象數據類型 向量 ,順序數據類型,核心爲動態分配數組。

線性查找:向量版本

int LinearSearch(int k,const vector<int>&vdata)
{
    //輸入:k-待查值;vdata-數據集名;
    //vector<int>僅存儲int型變量;
    //&vdata:獲取部分控制權。
    //輸出:利用return返回。
    //vdata.size()內蘊數據集長度;
    //在for循環中用vdata.size()控制條件
    for(size_t pos=0;pos<vdata.size();pos++)
        if(vdata[pos]==k)
            return pos;
        return vdata.size();
}

二:有順序則難以改變
引入鏈表的概念 linked list
有效的應對數據的動態變化,打破連續存儲的物理形態。

三:查變難以平衡
有序數組:變動困難,查找簡單
無序數組:變動簡單,查找困難

引入數據結構:二分查找樹
javascript中的DOM文檔樹模型

數組,鏈表和樹是三種最基本的數據存儲結構形態。

數據庫和數據集
術語:
數據庫:數據庫指的是以一定方式儲存在一起、能爲多個用戶共享、具有儘可能小的冗餘度、與應用程序彼此獨立的數據集合。
數據集:又稱爲資料集,數據集合,或資料集合,是一種數據所組成的集合。
抽象數據類型:SET
數據集x存放T型元素,key爲T型對象,考慮一種與T有關的類型D
,x中每個元素都唯一對應一個D型指針*p,對p使用p->data可得到對應的元素;

STL容器一覽
使用vector容器必須包含對應的頭文件

#include<vector>//頭文件
using std::vector;//使用vector在std空間中的對應的名字

向量容器–vector
動態伸縮
列表容器–list
不可像vector 一樣用下標進行位置訪問
list操作表首:
front(返回表首元素)
push_front(在表首插入新元素)
pop_front(刪除表首元素)
list操作表尾
back
push_back
pop_back
注意:
只能操作表首和表尾的抽象數據類型稱謂雙端隊列,封閉一個方向可以實現棧或隊列.
棧容器–stack
pop刪除棧頂元素
push將新元素置頂
top返回棧頂元素
隊列容器–queue
pop刪除隊首元素
push將新元素放於隊尾
front返回隊首元素
優先級隊列容器–priority——queue
集合容器–set
多重集合–multiset
映射容器–map

迭代器
SET中容器多提供了迭代器,SET抽象數據類型提供指針以訪問其元素地址,位置。
類似於導遊 通常將遍歷多個數據接口,訪問受限制的容器一般不可使用迭代器。棧,隊列,優先級隊列
適配器
如果原有的抽象數據類型所提供的功能過於龐雜或者接口不是特別滿足實際需求,則可對其進行簡單的改裝,借鑑了黑盒,在盒內對其進行改裝,改裝所得到的新的數據類型成爲適配器。
組合
當常見的抽象數據類型不足以達成目的時,組合可爲我們提供另一種解決問題的思路,簡單的組合是將較小的基本抽象數據類型組合成更大的數據類型,以實現更加複雜的功能。
完美的混亂
桌上辦公是算法和數據結構的完美結合
查 和 變 兩個永恆的主題

發佈了26 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章