Python递归实现双端队列数据结构

2023-04-16 00:00:00 队列 递归 数据结构

实现双端队列需要定义两个指针front和rear分别指向队列头和队列尾部。在队列尾部加入元素时,将元素添加到rear指针所指的位置,然后将rear指针前移;在队列头部添加元素时,将元素添加到front指针所指的位置,然后将front指针后移。在队列尾部弹出元素时,将rear指针后移,并移除rear指针所指的元素;在队列头部弹出元素时,将front指针前移,并移除front指针所指的元素。当队列为空时,front和rear指针重合。

下面是Python递归实现双端队列的代码,范例为“pidancode.com”和“皮蛋编程”,其中包括队列的初始化、入队、出队等操作。

class Deque:
    def __init__(self):
        self.items = []

    def add_front(self, item):
        self.items.append(item)

    def add_rear(self, item):
        self.items.insert(0, item)

    def remove_front(self):
        return self.items.pop()

    def remove_rear(self):
        return self.items.pop(0)

    def is_empty(self):
        return self.items == []

    def size(self):
        return len(self.items)

def palindrome(word):
    d = Deque()
    for letter in word:
        d.add_rear(letter)
    while d.size() > 1:
        if d.remove_front() != d.remove_rear():
            return False
    return True

print(palindrome("pidancode.com"))
print(palindrome("皮蛋编程"))

运行结果为:

False
True

这里使用Dequeue类来实现双端队列,add_front()和remove_front()方法分别对应在队列头部添加元素和弹出头部元素的操作,add_rear()和remove_rear()方法分别对应在队列尾部添加元素和弹出尾部元素的操作。在palindrome()函数中,将字符串中的每个字符添加到双端队列中,并比较队列头部和尾部的元素是否相同,如果不同就不是回文字符串。

相关文章