Python递归实现双端队列数据结构
实现双端队列需要定义两个指针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()函数中,将字符串中的每个字符添加到双端队列中,并比较队列头部和尾部的元素是否相同,如果不同就不是回文字符串。
相关文章