顺序表

作者: Zero2none | 来源:发表于2017-11-20 00:00 被阅读16次

    写在前面的

    所谓数据结构,为的是提供一个可以存放的地方。
    与此同时,可以对这个地方进行各种各样的操作。

    然而这个结构的最终目的是为了可以不用一遍遍的反正实现而成的。

    开始吧

    线性表则是这样一个东西,顺序表也同样如此。

    对于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内置方法来实现。


    疑问

    其实刚开始写到这里的时候是有两个疑问

    1. 是否应该固定顺序表的长度呢?
    2. 是否应该确保顺序表内每个元素的类型相同?
    回答

    依次回答

    1. 为此,甚至而外增加了个参数maxSize用来控制顺序表的长度,看实际情况喽。
    2. 其实不用控制每个元素的类型反而是有益的 -> Pythonic

    SourceCode


    最后,就酱

    相关文章

      网友评论

        本文标题:顺序表

        本文链接:https://www.haomeiwen.com/subject/jsrmvxtx.html