使用Python进行队列和出列数据结构
队列(Queue)
队列数据结构也意味着数据元素排列在队列中的位置相同。队列的唯一性在于添加和删除项目的方式。队列从两端打开,意味着元素从后面添加并从前面移除。所以这是一种先入先出的方法。
可以使用python list实现队列,我们可以使用insert()和pop()方法添加和删除元素。数据元素总是添加在队列末尾,所以没有插入结构。
Queue操作如下所示。
- Queue()创建一个空的新队列。它不需要参数并返回空队列。
- enqueue(item)将新项添加到队列的后面。它需要该项目并且不返回任何内容。
- dequeue()从队列中删除前项。它不需要参数并返回该项目。队列被修改。
- isEmpty()测试以查看队列是否为空。它不需要参数并返回一个布尔值。
- size()返回队列中的项目数。它不需要参数并返回一个整数。
在Python中实现队列
它适合于使用list集合的强大功能和简单性来构建抽象数据类型队列的实现,以构建队列的内部表示。
我们可以假设后面位于列表中的位置0。这允许我们使用list上的insert函数向队列后面添加新元素。
pop操作可用于删除前端元素(列表的最后一个元素)。回想一下,这也意味着enqueue将是O(n)并且dequeue将是O(1)。
class Queue: def __init__(self): self.items = [] def isEmpty(self): return self.items == []
def enqueue(self, item): self.items.insert(0,item)
def dequeue(self): return self.items.pop()
def size(self): return len(self.items)
双端队列(Deque)
Deque,也称为双端队列,它有两个末端,一个前部和一个后部,项目保留在集合中部位置。可以在前部或后部添加或移除新项目。
它不需要那些数据结构强制执行的LIFO和FIFO顺序。这取决于您对添加和删除操作的一致使用
Deque操作如下。
- Deque()创建一个空的deque。它不需要参数并返回空双端队列。
- addFront(item)在双端队列的前面添加一个新项。它需要该项目并且不返回任何内容。
- addRear(item)在双端队列的后面添加一个新项目。它需要该项目并且不返回任何内容。
- removeFront()从双端队列中删除前项。它不需要参数并返回该项目。双端队列被修改。
- removeRear()从双端队列中删除后部项目。它不需要参数并返回该项目。双端队列被修改。
- isEmpty()测试以查看deque是否为空。它不需要参数并返回一个布尔值。
- size()返回双端队列中的项目数。它不需要参数并返回一个整数。
在Python中实现Deque
class Deque: def __init__(self): self.items = [] def isEmpty(self): return self.items == []
def addFront(self, item): self.items.append(item)
def addRear(self, item): self.items.insert(0,item)
def removeFront(self): return self.items.pop()
def removeRear(self): return self.items.pop(0)
def size(self): return len(self.items)
使用Deindue for Palindrome-Checker
因为我们可以直接删除它们,所以我们可以比较它们,只有当它们匹配时才能继续。如果我们能够始终匹配第一个和最后一个项,那么最终我们要么耗尽字符,要么得到大小为1的deque,这取决于原始字符串的长度是偶数还是奇数。无论哪种情况,字符串都必须是回文。
from pythonds.basic.deque import Deque def palchecker(aString): chardeque = Deque()
for ch in aString: chardeque.addRear(ch)
stillEqual = True
while chardeque.size() > 1 and stillEqual: first = chardeque.removeFront() last = chardeque.removeRear() if first != last: stillEqual = False
return stillEqual
print(palchecker(“lsdkjfskf”)) print(palchecker(“radar”))
相关推荐
夜斗不是神 2020-11-17
huavhuahua 2020-11-20
Yasin 2020-11-16
xiaoseyihe 2020-11-16
千锋 2020-11-15
diyanpython 2020-11-12
chunjiekid 2020-11-10
wordmhg 2020-11-06
YENCSDN 2020-11-17
lsjweiyi 2020-11-17
houmenghu 2020-11-17
Erick 2020-11-17
HeyShHeyou 2020-11-17
以梦为马不负韶华 2020-10-20
lhtzbj 2020-11-17
pythonjw 2020-11-17
dingwun 2020-11-16
lhxxhl 2020-11-16