python数据结构与算法第七天【链表】

1.链表的定义

如图:

注意:

(1)线性表包括顺序表和链表

(2)顺序表是将元素顺序地存放在一块连续的存储区里

(3)链表是将元素存放在通过链构造的存储快中

2. 单向链表的实现

#!/usr/bin/env python
# _*_ coding:UTF-8 _*_

class Node(object):

    def __init__(self, elem):
        self.elem = elem
        self.next = None

class SingleLinkList(object):
    '''单向链表'''
    def __init__(self, node=None):
        self.__head = node

    def add(self, item):
        '''向单向链表的头部添加元素'''
        node = Node(item)
        node.next = self.__head
        self.__head = node
        return True

    def insert(self, pos, item):
        '''向单向链表指定位置插入元素'''
        if pos <= 0:
            self.add(item)
        elif pos > self.length() -1:
            self.append(item)
        else:
            pre = self.__head
            count = 0
            while pos - 1 > count:
                count += 1
                pre = pre.next
            node.next = pre.next
            pre.next = node
        return True

    def append(self, item):
        '''向单向链表的尾部追加元素'''
        node = Node(item)
        cur = self.__head
        while cur != None:
            if cur.next != None:
                cur = cur.next
            else:
                break
        cur.next = node
        return True

    def remove(self, item):
        pass

    def search(self, item):
        '''指定元素搜索'''
        cur = self.__head
        index = 0
        while cur != None:
            if cur.elem != item:
                cur = cur.next
                index += 1
            else:
                return index
        return -1

    def travel(self):
        '''遍历打印单向链表的值'''
        cur = self.__head
        str = ''
        while cur != None and cur.elem != None:
            str += '%s' % cur.elem
            cur = cur.next
        return str

    def length(self):
        '''返回单向链表的长度'''
        cur = self.__head
        count = 0
        while cur != None:
            count += 1
            cur = cur.next
        return count

    def is_empty(self):
        return self.__head == None


if __name__ == "__main__":
    singleLinkList = SingleLinkList()
    print singleLinkList.is_empty()
    print singleLinkList.length()

    singleLinkList.add(1)
    singleLinkList.insert(0, 2)
    singleLinkList.append(3)

    print singleLinkList.is_empty()
    print singleLinkList.length()

    print singleLinkList.travel()
    print singleLinkList.search(3)

结果如下:

/Users/liudaoqiang/PycharmProjects/numpy/venv/bin/python /Users/liudaoqiang/Project/python_project/bat_day3/link_list_test.py
True
0
False
3
213
2

Process finished with exit code 0
扫描二维码关注公众号,回复: 2605395 查看本文章

猜你喜欢

转载自www.cnblogs.com/liuzhiqaingxyz/p/9439814.html