链表

链表

1 链表定义

无序链表是元素的集合,其中每一个元素都有相对于其他元素的位置。支持以下操作:
在这里插入图片描述
在这里插入图片描述

2 代码实现

2.1 Node类实现

Node类具有两个数据成员,data和next保存结点的数据以及下一节点地址

具有四个函数成员,分别为获得数据与地址,设置数据与地址

class Node:
    def __init__(self, initdata):
        self.data = initdata
        self.next = None

    def getData(self):
        return self.data

    def getNext(self):
        return self.next

    def setData(self, newdata):
        self.data = newdata

    def setNext(self, newnext):
        self.next = newnext

2.2 UnorderedList类实现

class UnorderedList:
    def __init__(self):
        self.head = None

    def isEmpty(self):
        return self.head == None

    # 头节点的Data也有值,head是第一个元素
    def add(self, item):
        temp = Node(item)
        temp.setNext(self.head)
        self.head = temp

    def length(self):
        current = self.head
        count = 0
        while current != None:
            count = count + 1
            current = current.getNext()
        return count

    def showlist(self):
        current = self.head
        tag = 0
        while tag < self.length():
            print(current.getData())
            current = current.getNext()
            tag = tag + 1

    def search(self, item):
        current = self.head
        found = False
        while current != None and not found:
            if current.getData() == item:
                found = True
            else:
                current = current.getNext()
        return found

    def remove(self, item):
        current = self.head
        previous = None
        found = False
        while not found:
            if current.getData() == item:
                found = True
            else:
                previous = current
                current = current.getNext()

        if previous == None:
            self.head = current.getNext()
        else:
            previous.setNext(current.getNext())

    def insert(self, pos, item):
        if(pos == 1):
            self.add(item)
        elif(1 < pos < self.length()):
            current = self.head
            tag = 1
            while tag < pos-1 and tag < self.length():
                current = current.getNext()
                tag = tag + 1
            temp = Node(item)
            temp.setNext(current.getNext())
            current.setNext(temp)
        else:
            self.append(item)

    def append(self, item):
        current = self.head
        count = 1
        while count < self.length():
            count = count + 1
            current = current.getNext()
        temp = Node(item)
        current.setNext(temp)

    def index(self, item):
        current = self.head
        found = False
        count = 1
        while current != None and not found:
            if current.getData() == item:
                found = True
            else:
                current = current.getNext()
                count = count + 1
        return count

    def pop(self):
        current = self.head
        count = 1
        while count + 1 < self.length():
            count = count + 1
            current = current.getNext()
        current.setNext(None)

    def pop(self, index):
        current = self.head
        tag = 1
        while tag < index-1 and tag < self.length():
            current = current.getNext()
            tag = tag + 1
        dell = current.getNext()
        current.setNext(dell.getNext())

代码测试

l1 = UnorderedList()
l1.showlist()

l1.add(1)
l1.add(2)
l1.add(3)
l1.showlist()
3
2
1

l1.insert(2, 4)
l1.showlist()
3
4
2
1

l1.append(5)
l1.showlist()
3
4
2
1
5

l1.pop(2)
l1.showlist()
3
2
1
5

print('链表长度是:',l1.length())
链表长度是: 4

print('2的位置是:', l1.index(2))
2的位置是: 2

l1.showlist()
3
2
1
5

print(l1.isEmpty())
False
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值