第四周周总结
2020.03.14
利用python中得类设计数据结构栈
class Stack:
def __init__(self, size = 10):
#使用列表存放栈的元素
self._content = []
#初始栈大小
self._size = size
#栈中元素个数初始化为0
self._current = 0
def empty(self):
#清空栈
self._content = []
self._current = 0
def isEmpty(self):
return not self._content
def setSize(self, size):
#如果缩小空间时指定的新大小,小于已有元素个数
#则删除指定大小之后的已有元素
if size < self._current:
for i in range(size, self._current)[::-1]:
del self._content[i]
self._current = size
self._size = size
def isFull(self):
return self._current == self._size
def push(self, v):
#模拟入栈,需要先测试栈是否已满
if self._current < self._size:
self._content.append(v)
#栈中元素个数加1
self._current = self._current+1
else:
print('Stack Full!')
def pop(self):
#模拟出栈,需要先测试栈是否为空
if self._content:
#栈中元素个数减1
self._current = self._current-1
return self._content.pop()
else:
print('Stack is empty!')
def show(self):
print(self._content)
def showRemainderSpace(self):
print('Stack can still PUSH ', self._size-self._current, ' elements.')
#if __name__ == '__main__':
# print('Please use me as a module.')
s=Stack()
s.push("zheng")
s.push("jun")
s.push("long")
s.show()
s.pop()
s.show()
s.empty()
运行截图:

python中运算符重载,
class SetSelf(object):
def __init__(self, data=None):
if data == None:
self.__data = []
else:
if not hasattr(data, '__iter__'):
# 提供的数据不可迭代,实例化失败
raise Exception('必须提供可迭代的数据类型')
temp = []
for item in data:
#集合中的元素必须可哈希
hash(item)
if not item in temp:
temp.append(item)
self.__data = temp
# 析构方法
def __del__(self):
del self.__data
# 添加元素,要求元素必须可哈希
def add(self, value):
hash(value)
if value not in self.__data:
self.__data.append(value)
else:
print('元素已存在,操作被忽略')
# 删除元素
def remove(self, value):
if value in self.__data:
self.__data.remove(value)
print('删除成功')
else:
print('元素不存在,删除操作被忽略')
# 随机弹出并返回一个元素
def pop(self):
if not self.__data:
print('集合已空,弹出操作被忽略')
return
import random
item = random.choice(self.__data)
self.__data.remove(item)
return item
# 运算符重载,集合差集运算
def __sub__(self, anotherSet):
if not isinstance(anotherSet, SetSelf):
raise Exception('类型错误')
# 空集合
result = Set()
# 如果一个元素属于当前集合而不属于另一个集合,添加
for item in self.__data:
if item not in anotherSet.__data:
result.__data.append(item)
return result
# 提供方法,集合差集运算,复用上面的代码
def difference(self, anotherSet):
return self - anotherSet
# |运算符重载,集合并集运算
def __or__(self, anotherSet):
if not isinstance(anotherSet, SetSelf):
raise Exception('类型错误')
result = SetSelf(self.__data)
for item in anotherSet.__data:
if item not in result.__data:
result.__data.append(item)
return result
# 提供方法,集合并集运算
def union(self, anotherSet):
return self | anotherSet
# &运算符重载,集合交集运算
def __and__(self, anotherSet):
if not isinstance(anotherSet, SetSelf):
raise Exception('类型错误')
result = SetSelf()
for item in self.__data:
if item in anotherSet.__data:
result.__data.append(item)
return result
# ^运算符重载,集合对称差集
def __xor__(self, anotherSet):
return (self-anotherSet) | (anotherSet-self)
# 提供方法,集合对称差集运算
def symetric_difference(self, anotherSet):
return self ^ anotherSet
# ==运算符重载,判断两个集合是否相等
def __eq__(self, anotherSet):
if not isinstance(anotherSet, SetSelf):
raise Exception('类型错误')
return sorted(self.__data) == sorted(anotherSet.__data)
# >运算符重载,集合包含关系
def __gt__(self, anotherSet):
if not isinstance(anotherSet, SetSelf):
raise Exception('类型错误')
if self != anotherSet:
# 假设当前集合中所有元素都在另一个集合中
flag1 = True
# 检查当前集合中是否有元素不在另一个集合中
for item in self.__data:
if item not in anotherSet.__data:
# 当前集合中有的元素不属于另一个集合
flag1 = False
break
# 假设另一个集合的所有元素都在当前集合中
flag2 = True
for item in anotherSet.__data:
if item not in self.__data:
# 另一个集合中有的元素不属于当前集合
flag2 = False
break
# 当前集合中有元素不在另一个集合中
# 而另一个集合中所有元素都在当前集合中
# 则认为当前集合大于另一个集合
if not flag1 and flag2:
return True
return False
# >=运算符重载,集合包含关系
def __ge__(self, anotherSet):
if not isinstance(anotherSet, SetSelf):
raise Exception('类型错误')
return self==anotherSet or self>anotherSet
# 提供方法,判断当前集合是否为另一个集合的真子集
def issubset(self, anotherSet):
return self < anotherSet
# 提供方法,判断当前集合是否为另一个集合的超集
def issuperset(self, anotherSet):
return self > anotherSet
# 提供方法,清空集合所有元素
def clear(self):
while self.__data:
del self.__data[-1]
print('集合已清空')
# 运算符重载,使得集合可迭代
def __iter__(self):
return iter(self.__data)
# 运算符重载,支持in运算符
def __contains__(self, value):
return value in self.__data
# 支持内置函数len()
def __len__(self):
return len(self.__data)
# 直接查看该类对象时调用该函数
def __repr__(self):
return '{'+str(self.__data)[1:-1]+'}'
# 使用print()函数输出该类对象时调用该函数
__str__ = __repr__
s1=SetSelf([1,2,3])
print(s1)
s2=SetSelf({5,4,3})
print(s2)
s=s1|s2
print(s)


浙公网安备 33010602011771号