Python程式:在不使用庫set類的情況下定義集合資料結構
假設我們希望實現一個具有以下方法的集合資料結構:
- 建構函式:構造集合的新例項
- add(val):將整數val插入到集合中
- exists(val):檢查val是否在集合中
- remove(val):從集合中刪除val
因此,如果我們構造一個集合s,然後呼叫s.add(10),s.add(20),s.add(10),s.exists(10),s.remove(10),s.exists(10),s.exists(20),則輸出將是
- 對於s.add(10),它將插入10
- 對於s.add(20),它將插入20
- 10已經在s中,所以不會發生任何事情
- s.exists(10)將返回true,因為10存在
- 透過s.remove(10)刪除10
- s.exists(10)將返回false,因為10已被移除,並且一個元素只能存在一次
- s.exists(20)將返回true,因為20存在。
為了解決這個問題,我們將遵循以下步驟:
- 定義建構函式。
- buckets := 一個空對映,它將儲存一個數據列表
- 定義一個函式add()。它將接收val
- 如果exists(val)為false,則
- 將val插入到buckets[val]的末尾
- 定義一個函式exists()。它將接收val
- 當val在buckets[val]中時返回true,否則返回false
- 定義一個函式remove()。它將接收val
- 刪除buckets[val]
示例
讓我們看看以下實現以獲得更好的理解:
from collections import defaultdict class MySet: def __init__(self): self.buckets = defaultdict(list) def add(self, val): if not self.exists(val): self.buckets[val].append(val) def exists(self, val): return val in self.buckets[val] def remove(self, val): del self.buckets[val] s = MySet() s.add(10) s.add(20) s.add(10) print(s.exists(10)) s.remove(10) print(s.exists(10)) print(s.exists(20))
輸入
s = MySet() s.add(10) s.add(20) s.add(10) s.exists(10) s.remove(10) s.exists(10) s.exists(20)
輸出
True False True
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP