数据结构之链表:单链表

关于数据结构还是在学校的时候学的,那时候代码基本都在用C实现的。现在重新学习,代码主要用python ,部分会有 java实现的代码

链表是一种常见的数据结构,我们经常将链表和数组进行对比。

所以先说说数组:

数组:数组存储需要一块连续的内存空间来存储,所以当我需要10M的空间来存储数据,就算甚于空间为100M,但是没有连续的10M空间,空间也无法申请成功。

链表:链表存储数据无数组那样苛刻的条件,通过“指针”(或引用)将一组零散的内存块串联起来。

链表分为单链表,双链表和循环链表

单链表:单链表的头节点存放的是链表的第一个节点,即链表的基地址。最后一个节点称为尾节点,尾节点的指针指向的指为null。

单链表的python代码:

class Node():

    def __init__(self, item=None, pos_item=None):

        self._item = item
        self._next = pos_item

    def __repr__(self):
        return str(self._item)


# 单链表
class Chain():

    def __init__(self):
        self._head = None
        self._length = 0

    # 判断是否为空列表
    def isEmpty(self):
        return self._length == 0

    # 链表结尾插入
    def append(self,item):

        if isinstance(item, Node):
            node = item
        else:
            node = Node(item)
        if self._head is None:
            self._head = node
        else:
            be_node = self._head
            while be_node._next:
                be_node = be_node._next
            be_node._next = node
        self._length += 1

    # 插入节点
    def insert(self, index, item):

        if self.isEmpty():
            print('this chain table is empty')
            return

        if index <0 or index >= self._length:
            print("error info: out of index")
            return

        in_node = Node(item)
        node = self._head
        count = 1

        while True:
            node = node._next
            count += 1
            if count == index:

                next_node = node._next
                node._next = in_node
                in_node._next = next_node
                self._length += 1
                return

    # 删除节点
    def delete(self, index):

        if self.isEmpty():
            print('this chain is empty')
            return

        if index < 0 or index >= self._length:
            print("error info: out of index")
            return
        # if index == 0
        #     self._head = None
        else:
            node = self._head
            count = 0
            while True:
                count += 1
                if index == count:
                    node._next = node._next._next
                    break
                node = node._next
        self._length -= 1

    def __repr__(self):
        if self.isEmpty():
            print("the chain is empty")
            return
        nlist = ""
        node = self._head
        while node:
            nlist += node._item + " "
            node = node._next
        return nlist


if __name__ == '__main__':
    chain = Chain()
    chain.append('A')
    chain.append('B')
    chain.append('C')
    chain.append('D')
    chain.append('E')
    chain.append('F')
    chain.append('G')
    print(chain)
    chain.insert(2, 'H')
    print(chain)
    chain.delete(3)
    print(chain)
    print(chain._length)

猜你喜欢

转载自www.cnblogs.com/qiutian-guniang/p/10295886.html