顺序表
2017-11-20 本文已影响16人
Zero2none
写在前面的
所谓数据结构,为的是提供一个可以存放的地方。
与此同时,可以对这个地方进行各种各样的操作。
然而这个结构的最终目的是为了可以不用一遍遍的反正实现而成的。
开始吧
线性表则是这样一个东西,顺序表也同样如此。
增,删,查,改
对于Py交易而言自然有它独到的地方。
有一个词Pythonic
可以很好的形容。
初始化
def __init__(self, maxSize=10):
"""Init the sequence list
:param __maxSize: The max size of list length.
If the __maxSize=None, it means length -> ∞.
"""
super(SequenceList, self).__init__()
self.__check(maxSize)
self.List = []
self.__maxSize = maxSize
这便是Py交易的初始化,
在Py交易中有一个List
的内置数据结构可以很轻松地完成,
对于顺序表的四个操作,嗯~它都有,只不过在这里,通过顺序表
进行封装起来而已。
销毁
def __del__(self):
"""Built-in function: To clear the list.
"""
self.List.clear()
Py交易类的专有方法,析构函数,或者也可以通过自定义函数实现,不过
某种意义上而言,对于Py交易并不需要析构函数,Py交易的垃圾回收机制可以很好的解决这个问题。
长度
def __len__(self):
"""Built-in func: Get the length of the list.
"""
return len(self.List)
Py交易类的专有方法,可以返回一个类的‘长度’。
函数本身反正调用的是List
本身的len()
函数。
遍历操作
def traverse_register(self, fn):
"""A decorator for fitness function register.
:param fn: The func make by yourself.
"""
self.func = fn
遍历操作,在遍历之前需要用语法糖将遍历注册倒traverse_register()
函数中。
遍历,可不单单指的是输出哦~
def traverse(self, reverse=False):
"""Traverse The every element of list.
:prarm reverse: Reverse list to traverse.
"""
List = self.List
if reverse:
List = reversed(List)
for i in List:
self.func(i)
遍历开始了,Py交易对循环支持的很好,这里为了更Pythonic
,而增加了reverse
参数支持反向遍历。
追加操作
def append(self, data):
"""Append element element to list.
:param data: The element that append to.
"""
if self.flag:
if not len(self) < self.__maxSize:
raise AttributeError(
'The parameter index must be less than __maxSize. ¯\\_(ツ)_/¯...')
self.List.append(data)
"""
There hava a question about the variable of "data".
Should keep the instance of the SequenceList? or not?
In the data structure it is controled by __maxSize.
"""
append()
函数这是一个启动整个数据结构的函数,没有了这个函数嘛,¯\(ツ)/¯ ...
同样Py交易调用的是本身List
内置方法来实现。
疑问
其实刚开始写到这里的时候是有两个疑问
- 是否应该固定顺序表的长度呢?
- 是否应该确保顺序表内每个元素的类型相同?
回答
依次回答
- 为此,甚至而外增加了个参数
maxSize
用来控制顺序表的长度,看实际情况喽。 - 其实不用控制每个元素的类型反而是有益的 ->
Pythonic
最后,就酱