python 一些基本数据结构

来源:互联网 发布:高新区行知小学 重点 编辑:程序博客网 时间:2024/05/16 07:55
 一.数组:

1.顺序存储

2.长度不可变化

3.可以通过索引下标找到相关元素

4.不适合插入操作

注:python的列表像个动态的数组,长度不固定(可以使用插入等方法)

简易数组实现:

class Array(object):    def __init__(self,data):        self.__data = data    def __str__(self):        return str(self.__data)    def __getitem__(self, item):        return self.__data[item]    def length(self):        return self.__data.__len__()    def __setitem__(self, key, value):        self.__data[key] = valueif __name__ == '__main__':    a = Array([2,3,4])    print(a[2])    print(a[::-1])    print(a.length())    a[2] = 99    print(a)

二.链表:

1.不按顺序存储,可以不连续

2.长度可以变化

3.无法通过索引找到相关元素

4.适合做插入操作

注:不像数组,插入时要动用别的元素的位置

单链表的优点是插入和删除,缺点是查询

#定义一个基于节点类的单链表对象类class LNode:    def __init__(self,elem,_next=None):        self.elem=elem        self.next=_nextclass Myexception(Exception):    def __init__(self,msg):        self.msg = msg    def __str__(self):        return self.msgclass LList:    def __init__(self):         self._head=None            def is_empty(self):         return self._head is None    def prepend(self,elem):        self._head=LNode(elem,self._head)    def pop(self):        if self._head is None:             raise Myexception('no head')        e, self._head = self._head.elem,self._head.next        return e    def append(self,elem):        if self._head is None:            self._head=LNode(elem)            return        p=self._head        while p.next is not None:            p=p.next        p.next=LNode(elem)    def pop_last(self):        if self._head is None:            raise ('in pop_last')        p=self._head        if p.next is None:            e=p.elem            self._head=None            return e        while p.next.next is not None:             p=p.next        e=p.next.elem        p.next=None        return p    def find(self,pred):        p=self._head        while p is not None:            if pred(p.elem):                return p.elem            p=p.next    def __str__(self):        p=self._head        while p is not None:            print(p.elem)            print('end')            p=p.next
if __name__ =='__main__':    mlist1=LList()    print(mlist1.is_empty())    for i in range(11,20):        mlist1.append(i)    mlist1.pop()    print(mlist1)



原创粉丝点击