python链表_双向链表

双向链表简介

python链表_双向链表
(图片来源网络,侵删)

双向链表是一种特殊的链表,与单向链表不同,它在每个节点中都包含两个指针,一个指向前一个节点,另一个指向后一个节点,这使得双向链表具有更高的灵活性,可以在前后两个方向上进行遍历,在实际应用中,双向链表常用于实现栈、队列等数据结构

双向链表的实现

双向链表的实现主要包括以下几个部分:

1、定义节点类:节点类包含数据域和两个指针域,分别指向前一个节点和后一个节点。

2、定义双向链表类:双向链表类包含头节点、尾节点等属性,以及一些基本操作,如插入、删除、查找等。

3、实现双向链表的基本操作:包括插入、删除、查找等操作。

下面是一个简单的双向链表实现:

class Node:
    def __init__(self, data):
        self.data = data
        self.prev = None
        self.next = None
class DoublyLinkedList:
    def __init__(self):
        self.head = None
        self.tail = None
    def insert(self, data):
        new_node = Node(data)
        if not self.head:
            self.head = new_node
            self.tail = new_node
        else:
            new_node.prev = self.tail
            self.tail.next = new_node
            self.tail = new_node
    def delete(self, data):
        current = self.head
        while current:
            if current.data == data:
                if current.prev:
                    current.prev.next = current.next
                else:
                    self.head = current.next
                if current.next:
                    current.next.prev = current.prev
                else:
                    self.tail = current.prev
                return True
            current = current.next
        return False
    def search(self, data):
        current = self.head
        while current:
            if current.data == data:
                return True
            current = current.next
        return False

双向链表的应用

双向链表在实际应用中有很多用途,以下是一些常见的应用场景:

1、栈:双向链表可以很容易地实现栈,通过改变头部和尾部指针来实现入栈和出栈操作,使用双向链表实现一个简单的整数栈:

class Stack:
    def __init__(self):
        self.list = DoublyLinkedList()
    def push(self, data):
        self.list.insert(data)
    def pop(self):
        if self.list.head:
            return self.list.delete(self.list.head.data)
        else:
            return None

2、队列:双向链表也可以实现队列,通过改变头部和尾部指针来实现入队和出队操作,使用双向链表实现一个简单的整数队列:

class Queue:
    def __init__(self):
        self.list = DoublyLinkedList()
    def enqueue(self, data):
        self.list.insert(data)
    def dequeue(self):
        if self.list.head:
            return self.list.delete(self.list.head.data)
        else:
            return None

3、其他数据结构:双向链表还可以用于实现其他数据结构,如哈希表、二叉搜索树等,使用双向链表实现一个简单的哈希表:

class HashTable:
    def __init__(self, size):
        self.size = size
        self.table = [DoublyLinkedList() for _ in range(size)]
        self.count = 0

4、排序算法:双向链表可以用于实现各种排序算法,如归并排序、快速排序等,使用双向链表实现快速排序:

def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr) // 2]
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    return quick_sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right) left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/676933.html

(0)
未希的头像未希新媒体运营
上一篇 2024-06-08 08:58
下一篇 2024-06-08 09:03

发表回复

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

免费注册
电话联系

400-880-8834

产品咨询
产品咨询
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购  >>点击进入