zoukankan      html  css  js  c++  java
  • python3实现链表

    1、链表的实现

      a、链表的结构为:

      b、链表的实现方法;

    #链表结构实现  私有属性_pro_item是指向下个节点的指针,_item为此节点的值
    class ChainDemo():
    
        def __init__(self,item = None,pos_item=None):
    
            self._item = item
            self._pos_item = pos_item
    
    
    if __name__ == '__main__':
        chain = ChainDemo('A',(ChainDemo('B',ChainDemo('C',ChainDemo('D')))))
        while True:
            print(chain._item)
            if chain._pos_item != None:
                chain = chain._pos_item
            else:
                break

     2、实现对链表的操作(增删)

    #链表节点结构实现  私有属性_pro_item是指向下个节点的指针,_item为此节点的值
    class Node():
    
        def __init__(self,item = None,pos_item=None):
    
            self._item = item
            self._next = pos_item
    
        def __repr__(self):
            '''
            用来定义Node的字符输出,
            print为输出item
            '''
            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 == 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: 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
    
    
                # node = s
    
    
        #删除数据
        def delete(self,index):
    
            if self.isEmpty():
                print('this chain table is empty')
                return
    
            if index<0 or index >= self.length:
                print("error: 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 table 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')
        chain.insert(4,'p')
        chain.delete(3)
        print(chain,chain._head._item,chain.length)
  • 相关阅读:
    使用watch定时执行命令并显示结果
    LVS配置
    myeclipse通过查询源码查询方法
    导入struts2框架项目无法运行tomcat
    解决eclipse/myeclipse导入项目时出现红色叹号的方法
    my/eclipse中的debug调试
    导入项目后servlet报错
    转到Servlet出现500型错误
    关于快捷键导包失败
    关于jsp找不到servlet
  • 原文地址:https://www.cnblogs.com/jiuyang/p/7930470.html
Copyright © 2011-2022 走看看