今天朋友幾篇文章介紹了改尾部、方法-的文章. 關聯文章的位址
額,睡不著
第二章的尾部還有個關於寫翻轉棋的,臨時先不寫.
面下就是直接上set和map了,這裡應用的是最簡略的方法.也就是外部應用的list
先上set
不過看上去雜復都很高的.
classset:
def__init__
(self):
self._theelements =list()
def__len__
(self):
return
len(self._theelements)
def__contains__
(self,element):
return element in
self._theelements
defadd(self,element):
if element not
inself:
defremove(self,element):
assert element in self,"
the element must be in the set
"self._theelements.remove(item)
def__eq__
(self,setb):
if len(self) !=len(setb):
return
false
else
:
return
self.issubsetof(setb)
defissubsetof(self,setb):
for element in
self:
if element not
insetb:
return
false
return
true
defunion(self,setb):
newset =set()
newset._theelements.extend(self._theelements)
for element in
setb:
if element not
inself:
return
newset
definterset(self,setb):
newset =set()
for element in
setb:
if element in
self:
return
newset
defdifference(self,setb):
newset =set()
for element in
self:
if element not
insetb:
return
newset
def__iter__
(self):
return iter(self._theelements)
插入$o(n)$,求並,交.差,等相$o(n^2)$,當然面後有通過排序來行進優化的.
面下就是map了,不過其中額定應用了乙個簡略的存保key,value. 這個類似於stl中的 std::pair.
碼代如下:
classmap:
def__init__
(self):
self._entrylist =list()
def__len__
(self):
return
len(self._entrylist)
def__contains__
(self,key):
ndx =self._findposition(key)
return ndx is
notnone
defadd(self,key,value):
ndx =self._findposition(key)
if ndx is
notnone:
self._entrylist[ndx].value =value
return
false
else
: entry =_mapentry(key,value)
return
true
defvalueof(self,key):
ndx =self._findposition(key)
assert ndx is
not none,"
invalid map key
"return
self._entrylist[ndx].value
defremove(self,key):
ndx =self._findposition(key)
ndx =self._findposition(key)
assert ndx is
not none,"
invalid map key
"self._entrylist.pop(ndx)
def__iter__
(self):
return
_mapiterator(self._entrylist)
def_findposition(self,key):
for i in
range(len(self)):
if self._entrylist[i].key ==key:
return
i
return
none
class
_mapentry:
def__init__
(self,key,value):
self.key =key
self.value =value
class
_mapiterator:
def__init__
(self,mapref):
self._curi =0
self._mapref =mapref
def__iter__
(self):
return
self
defnext(self):
if self._curi entry =self._mapref[self._curi]
self._curi += 1
return
entry.key,entry.value
else
:
raise stopiteration
嗯.都是很簡略的.
睡覺拉..
文章結束給大家分享下程式設計師的一些笑話語錄: 某程式設計師對書法十分感興趣,退休後決定在這方面有所建樹。花重金購買了上等的文房四寶。一日突生雅興,一番磨墨擬紙,並點上了上好的檀香,頗有王羲之風 範,又具顏真卿氣勢,定神片刻,潑墨揮毫,鄭重地寫下一行字:hello world.
演算法和資料結構
演算法和資料結構 演算法和資料結構 千絲萬縷的聯絡 縱觀各種演算法書籍,大多都是將演算法和資料結構作為乙個整體來講述。資料結構就是陣列 樹結構等儲存或表現物件資料的結構。將演算法和資料結構作為整體講述,是因為必須依照演算法中的常用操作選擇資料結構。例如,事先將資料儲存在適當的樹形結構中,大多數情況下...
演算法和資料結構
演算法 資料結構與演算法的關係是相互依賴不可分割的。演算法的定義 演算法是解決特定問題求解步驟的描述,在計算機中為指令的有限序列,並且每條指令表示乙個或多個操作。演算法的特性 有窮性 確定性 可行性 輸入 輸出。演算法設計的要求 正確性 可讀性 健壯性 高效率和低儲存量需求。演算法特性與演算法設計容...
集合和資料結構
類似的資料在作為集合而儲存和操作時通常可以得到更高效地處理。可使用 system.array 類或 system.collections system.collections.generic system.collections.concurrent 和 system.collections.imm...