Python数据结构小demo

其他都是废话,看代码

1、一个简单的增删改

###节点类
###三个属性,节点值,前向指针,后向指针
class Node():
    def __init__(self, value, next, prev):
        self.value = value
        self.next = next
        self.prev = prev


###操作链表类
class Link():
    def __init__(self, value):
        self.link_create(value)

    # 链表元素个数
    def link_count(self):
        print("link's len is %d" % self.count)

    # 创建链表
    def link_create(self, value):
        self.head = Node(value, None, None)
        self.tail = self.head
        self.count = 1


    # 在链表指定位置添加元素
    def link_push_index(self, index, value):
        temp_next = Node(value, None, None)
        if index <= 1:  # index < 1时,头加
            temp_next.next = self.head
            self.head = temp_next

        elif index >= self.count:  # index >链表长度时,尾加
            self.tail.next = temp_next
            temp_next.prev = self.tail
            self.tail = temp_next
        else:
            # 链表指定位置加
            pass

        num = 1
        temp_node = self.head
        while num != index:
            num = num + 1
            temp_node = temp_node.next
        temp_node_prev = temp_node.prev
        temp_node.prev = temp_next
        temp_next.next = temp_node
        temp_next.prev = temp_node_prev
        temp_node_prev.next = temp_next


        self.count += 1

    # 添加元素-默认尾加
    def link_push(self, value):
        temp_next = Node(value, None, None)
        temp_prev = self.tail
        self.tail.next = temp_next
        self.tail = temp_next
        self.tail.prev = temp_prev
        self.count += 1


    # 删除指定位置元素
    def link_pop_index(self, index):
        if index <= self.count and index > 0:
            if index == 1:
                temp_node = self.head
                self.head = temp_node.next
            else:
                temp_num = 1
                temp_node = self.head
                while temp_num != index:
                    temp_node = temp_node.next
                    temp_num = temp_num + 1
                temp_node.prev.next = temp_node.next
                temp_node.next.prev = temp_node.prev
            self.count -= 1

        else:
            print("Error:the link only have %d node" % self.count)

    # 删除第一个找到的目标元素
    def link_pop_value_one(self, value):
        if self.count > 0:
            if value == self.head.value:
                temp_node = self.head
                self.head = temp_node.next
                self.count -= 1
            else:
                temp_node = self.head
                while temp_node != None and temp_node.value != value:
                    temp_node = temp_node.next

                if temp_node == None:
                    print("the link not have %s" % value)

                else:
                    temp_node.prev.next = temp_node.next
                    temp_node.next.prev = temp_node.prev
                    self.count -= 1
        else:
            print("the link is empty!")

    # 删除链表中全部目标元素
    def link_pop_value_all(self, value):
        if self.count > 0:
            temp_node = self.head
            while temp_node != None:
                if self.head.value == value:
                    temp_node = self.head
                    self.head = temp_node.next
                    temp_node = self.head
                    self.count -= 1
                else:
                    if temp_node.value == value:
                        if temp_node.next != None:
                            temp_node.prev.next = temp_node.next
                            temp_node.next.prev = temp_node.prev
                        else:
                            self.tail = temp_node.prev
                            self.tail.next = None
                        self.count -= 1
                        temp_node = temp_node.next
                    else:
                        print("the link is empty!")

    # 修改指定位置元素的值
    def link_alter_index(self, num, value):
        temp_node = self.head
        temp_num = 1
        if num > 0 and num <= self.count:
            while temp_num != num:
                temp_num += 1
                temp_node = temp_node.next
            temp_node.value = value
        else:
            print("Error:the link only have %d node" % self.count)


    # 修改第一个找到的目标元素的值
    def link_alter_value_one(self, value_old, value_new):
        temp_node = self.head
        while temp_node != None and temp_node.value != value_old:
            temp_node = temp_node.next
        if temp_node == None:
            print("the link not have %s" % value_old)
        else:
            temp_node.value = value_new


    # 修改链表中全部目标元素的值
    def link_alter_value_all(self, value_old, value_new):
        temp_node = self.head
        while temp_node != None:
            if temp_node.value == value_old:
                temp_node.value = value_new
            temp_node = temp_node.next

    # 打印链表(正序)
    def link_print(self):
        temp_node = self.head
        while temp_node != None:
            print
            temp_node.value
            temp_node = temp_node.next


head = Link("head")
for i in range(5):
    head.link_push(i)

    head.link_print()
head.link_count()


head.link_pop_index(2)    #删除第2个元素
head.link_print()
head.link_count()


head.link_push(5)   #添加元素5
head.link_print()
head.link_count()

head.link_push_index(3,1000)   #在第三个位置添加 1000
head.link_print()
head.link_count()


head.link_pop_value_one(1000) #删除元素1000
head.link_print()
head.link_count()

# head.link_pop_value_all(5)  #删除所有元素5
# head.link_print()
# head.link_count()

# 修改指定位置元素的值
head.link_alter_index(1,1995)
head.link_print()
head.link_count()

head.link_alter_value_one(15,5)
head.link_print()
head.link_count()

head.link_alter_value_all(5,118)
head.link_print()
head.link_count()

2、结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值