python3 链表_最适合用作链式队列的链表是

python3 链表_最适合用作链式队列的链表是一、链表链表类的定义:创建链表——头插法创建链表——尾插法二、双链表定义双链表双链表——插入p节点双链表——删除小结三、链栈四、链队列_python链队列

目录

一、链表

链表类的定义:

创建链表——头插法

创建链表——尾插法

二、双链表

定义双链表

双链表——插入p节点

双链表——删除

小结

三、链栈

四、链队列

自学视频:B站-路飞学城-清华大学博士讲解python数据结构与算法

一、链表

介绍:链表是由一系列节点组成的元素集合,每个节点包含两个部分,数据域item 和指向下一个节点的指针next。通过节点之间的相互连接,最终串联成一个链表

python3 链表_最适合用作链式队列的链表是

链表类的定义:

class Node(object):
    def __init__(self, item):
        self.item = item   # 存数据
        self.next = None   # 存当前节点的下一个节点

测试:

if __name__ == '__main__':
    n1 = Node(1)
    n2 = Node(2)
    n3 = Node(3)
    n1.next = n2
    n2.next = n3

    print(n1.next.item)   # 2
    print(n1.next.next.item)   # 3
    print(n1.next.next.next.item)   # 报错

创建链表——头插法

新来的节点成为新的头结点head,倒序排列

def create_linklist(li):
    head = Node(li[0])
    for element in li[1:]:
        node = Node(element)   # 创建一个节点
        node.next = head
        head = node
    return head

测试:

lk = create_linklist([1, 2, 3])
print_linklist(lk)

 python3 链表_最适合用作链式队列的链表是

创建链表——尾插法

新来的节点成为尾结点tail,顺序排列

def create_link_tail(li):
    head = Node(li[0])
    tail = head
    for element in li[1:]:
        node = Node(element)  # 创建一个节点
        tail.next = node
        tail = node
    return head

测试:

lk1 = create_link_tail([1,2,3])
print_linklist(lk1)

python3 链表_最适合用作链式队列的链表是

二、双链表

python3 链表_最适合用作链式队列的链表是

定义双链表

class Node(object):
    def __init__(self, item):
        self.item = item
        self.next = None
        self.prior = None

双链表——插入p节点

p.next = curNode.next

curNode.prior = p

p.prior = curNode

curNode.next = p

双链表——删除

python3 链表_最适合用作链式队列的链表是

定义p指向要删除的节点

p = curNode.next

curNode.next = p.next

p.next.prior = curNode

小结

链表与顺序表

链表在插入删除的操作上明显快于顺序表
链表的内存可更灵活的分配
利用链表实现栈和队列
链表的链式存储结构对树和图的结构有很大的启发性

三、链栈

# 定义链节点类
class LinkNode(object):
    def __init__(self, data):
        self.data = data   # 存数据
        self.next = None   # 存当前节点的下一个节点


# 链栈
class LinkStack(object):
    def __init__(self):
        self.top = LinkNode(None)  # 定义栈顶为空

    # 进栈
    def push(self, e):
        node = LinkNode(e)   # 创建一个新节点
        node.next = self.top   # 新节点的下一个指向top
        self.top = node    # top指向新节点

    # 出栈
    def pop(self):
        if self.top is None:
            print("栈为空!")
            exit()
        out_data = self.top.data
        self.top = self.top.next
        return out_data

    # 判空
    def is_empty(self):
        return self.top is None

    # 取栈顶元素
    def get_top(self):
        if self.top is None:
            print("栈为空!")
            return None
        return self.top.data

测试:

if __name__ == '__main__':
    ls = LinkStack()
    for element in range(5):
        ls.push(element)
    print(ls.get_top())
    print(ls.pop())
    print(ls.is_empty())

结果:

python3 链表_最适合用作链式队列的链表是

四、链队列

# 定义一个链表类
class LinkNode(object):
    def __init__(self, data):
        self.data = data
        self.next = None


# 定义一个链队列
class QueueLink(object):
    def __init__(self):
        temp_node = LinkNode(None)   # 创建一个空的链表节点
        self.rear = temp_node  # 队尾指针,指向空节点
        self.front = temp_node  # 队首指针,指向空节点

    # 创建一个链队列
    def create_linkQueue(self, li):
        for element in li:
            self.EnQueue(element)

    # 判空
    def is_empty(self):
        if self.front == self.rear:
            return True
        else:
            return False

    # 求队长
    def LenghQueue(self):
        head = self.front
        count = 0
        while head.next:
            count += 1
            head = head.next
        return count

    # 入队
    def EnQueue(self, e):
        node = LinkNode(e)   # 创建一个新节点
        if self.is_empty():
            self.front.next = node
        self.rear.next = node
        self.rear = node

    # 出队
    def DeQueue(self):
        if self.is_empty():
            print("队列为空!")
            exit()
        else:
            temp = self.front.next   # 定义temp指向队首元素
            self.front.next = temp.next   # 让front的next指针指向队首元素的下一个
            if self.rear == temp:
                # 该节点为尾结点
                self.front = self.rear
            return temp.data

    def Traverse(self):
        head = self.front
        while head.next:
            head = head.next
            print(head.data, end=" ")
        print(" ")

    def GetQueue(self):
        return self.front.next.data

测试:

if __name__ == '__main__':
    q1 = QueueLink()
    q1.create_linkQueue([1, 2, 3, 4, 5, 6])
    print("队列元素如下")
    q1.Traverse()
    print("队列的长度为{}".format(q1.LenghQueue()))
    print("队首元素为{}".format(q1.GetQueue()))
    for element in range(q1.LenghQueue()):
        print(q1.DeQueue(), end=" ")

结果:

python3 链表_最适合用作链式队列的链表是

 

今天的文章python3 链表_最适合用作链式队列的链表是分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/82919.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注