u013184161 2018-04-08 08:22 采纳率: 0%
浏览 931
已结题

如何使用python实现随时间增加节点的数据结构

编程小白求指导,如何实现如图所示的数据结构,并且统计节点数
图片说明

  • 写回答

1条回答 默认 最新

  • 无明之徒 2018-04-08 10:45
    关注

    python实现链表
    首先,定义节点类Node:
    class Node:
    '''
    data: 节点保存的数据
    next: 保存下一个节点对象
    '''
    def __init
    _(self, data, pnext=None):
    self.data = data
    self._next = pnext

    def __repr__(self):
        '''
        用来定义Node的字符输出,
        print为输出data
        '''
        return str(self.data)
                然后,定义链表类:
    

    链表要包括:

    属性:

    链表头:head

    链表长度:length

    方法:

    判断是否为空: isEmpty()
    def isEmpty(self):
    return (self.length == 0
    增加一个节点(在链表尾添加): append()
    def append(self, dataOrNode):
    item = None
    if isinstance(dataOrNode, Node):
    item = dataOrNode
    else:
    item = Node(dataOrNode)

    if not self.head:
        self.head = item
        self.length += 1
    
    else:
        node = self.head
        while node._next:
            node = node._next
        node._next = item
        self.length += 1
                删除一个节点: delete()
                #删除一个节点之后记得要把链表长度减一
    

    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 = self.head._next
        self.length -= 1
        return
    
    #prev为保存前导节点
    #node为保存当前节点
    #当j与index相等时就
    #相当于找到要删除的节点
    j = 0
    node = self.head
    prev = self.head
    while node._next and j < index:
        prev = node
        node = node._next
        j += 1
    
    if j == index:
        prev._next = node._next
        self.length -= 1
                修改一个节点: update()
                def update(self, index, data):
    if self.isEmpty() or index < 0 or index >= self.length:
        print 'error: out of index'
        return
    j = 0
    node = self.head
    while node._next and j < index:
        node = node._next
        j += 1
    
    if j == index:
        node.data = data
                查找一个节点: getItem()
                def getItem(self, index):
    if self.isEmpty() or index < 0 or index >= self.length:
        print "error: out of index"
        return
    j = 0
    node = self.head
    while node._next and j < index:
        node = node._next
        j += 1
    
    return node.data
        查找一个节点的索引: getIndex()
        def getIndex(self, data):
    j = 0
    if self.isEmpty():
        print "this chain table is empty"
        return
    node = self.head
    while node:
        if node.data == data:
            return j
        node = node._next
        j += 1
    
    if j == self.length:
        print "%s not found" % str(data)
        return
                插入一个节点: insert()
                def insert(self, index, dataOrNode):
    if self.isEmpty():
        print "this chain tabale is empty"
        return
    
    if index < 0 or index >= self.length:
        print "error: out of index"
        return
    
    item = None
    if isinstance(dataOrNode, Node):
        item = dataOrNode
    else:
        item = Node(dataOrNode)
    
    if index == 0:
        item._next = self.head
        self.head = item
        self.length += 1
        return
    
    j = 0
    node = self.head
    prev = self.head
    while node._next and j < index:
        prev = node
        node = node._next
        j += 1
    
    if j == index:
        item._next = node
        prev._next = item
        self.length += 1
                清空链表: clear()
                def clear(self):
    self.head = None
    self.length = 0
    
    评论

报告相同问题?

悬赏问题

  • ¥15 一道python难题2
  • ¥15 一道python难题
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备