ADT:Abstrack Datatype
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設,游仙企業(yè)網(wǎng)站建設,游仙品牌網(wǎng)站建設,網(wǎng)站定制,游仙網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,游仙網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。在python里面一切都是對象
示例:
l = list() #定義列表 l.append(3) #調用append方法 l.remove(3) #調用remove方法
上面示例中的列表就是一種抽象數(shù)據(jù)類型,通過組合一些現(xiàn)有的數(shù)據(jù)跟操作來形成一種新的數(shù)據(jù)結構。
用python的class實現(xiàn)抽象數(shù)據(jù)類型(ADT)
data (數(shù)據(jù))
class
method(操作方法)
這里實現(xiàn)一個bag來做一個示例:
data:要用容器去存儲
bag
method:add、remove、len、iter
代碼如下:
#-*- condig:utf-8 -*- class Bag(object): def __init__(self, maxsize=10): #初始化,maxsize定義大容量 self.maxsize = maxsize #屬性,表示大容量 self._items = list() #容器類型,這里用列表 def add(self, item): #定義add操作 if len(self) > self.maxsize: #如果當前長度大于大定義容量 raise Exception ('Bag is Full') #拋出異常 self._items.append(item) #否則添加到列表中 def remove(self, item): #定義刪除操作 self._items.remove(item) def __len__(self): #魔術方法 return len(self._items) #數(shù)據(jù)列表的長度 def __iter__(self): #實現(xiàn)迭代器 for item in self._items: yield item #測試用例 def test_bag(): bag = Bag() bag.add(1) bag.add(2) bag.add(3) assert len(bag) == 3 bag.remove(3) assert len(bag) == 2 for i in bag: print (i) # # test_bag() #調用測試函數(shù)
執(zhí)行腳本:
# python bag_adt.py
實現(xiàn)一個ADT要注意的幾個問題:
(1)數(shù)據(jù)成員,比如:items,應該選用什么樣的數(shù)據(jù)結構?
(2)選用數(shù)據(jù)結構,能否滿足定義ADT的操作要求?
比如add,remove這些操作能否滿足要求;
(3)選用數(shù)據(jù)結構能支持高效的操作,它的效率如何?
例如上例中容器選用list來作為他的底層存儲,實際上他的add和remove操作效率,
不如選用set來作為容器效率更高,上例中的 remove 的操作來刪除中間的一個元素,
它的時間復雜度就是O(n)。
【O(n)可以簡單理解為刪除一個元素,需要執(zhí)行多少個步驟?!?/p>
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。