Data structures and algorithms implemented by Python: Dual-end queue explanation; python data structures and algorithms
This article describes the Python-implemented data structure and algorithm dual-end queue. Share it with you for your reference. The specific analysis is as follows:
I. Overview
A double-ended queue (deque) is a linear data structure with queues and stacks. The dual-end queue also has two ends: front and rear. However, unlike the queue, the insert operation can be performed on both ends (first and last, the same is true for delete operations.
Ii. ADT
The dual-end queue ADT (abstract data type) generally provides the following interfaces:
① Deque () creates a dual-end queue
② AddFront (item) inserts an item into the first line
③ AddRear (item) inserts an item to the end of the team
④ RemoveFront () returns the first item and deletes the item from the double-ended queue.
⑤ RemoveRear () returns the item at the end of the team and deletes the item from the dual-end queue.
⑥ Empty () determines whether the dual-end queue is empty
7. size () returns the number of items in the double-ended queue.
The double-end queue operation is as follows:
Iii. Python implementation
In Python, there are two ways to implement the above two-end queue ADT: using the built-in type list, using the standard library collections. deque (actually collections. deque is the standard implementation of double-end queues in Python ).
The two methods differ mainly in performance (For details, refer to collections. deque | TimeComplexity ):
Operation | Implementation list collections.deque
-----------------------------------------
addFront O (n) O (1)
-----------------------------------------
addRear O (1) O (1)
-----------------------------------------
removeFront O (n) O (1)
-----------------------------------------
removeRear O (1) O (1)
1. Use the built-in type list
#!/usr/bin/env python
# -*- coding: utf-8 -*-
class Deque:
def __init__(self):
self.items = []
def addFront(self, item):
self.items.insert(0, item)
def addRear(self, item):
self.items.append(item)
def removeFront(self):
return self.items.pop(0)
def removeRear(self):
return self.items.pop()
def empty(self):
return self.size() == 0
def size(self):
return len(self.items)
2. Use the standard library collections. deque
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from collections import deque
class Deque:
def __init__(self):
self.items = deque()
def addFront(self, item):
self.items.appendleft(item)
def addRear(self, item):
self.items.append(item)
def removeFront(self):
return self.items.popleft()
def removeRear(self):
return self.items.pop()
def empty(self):
return self.size() == 0
def size(self):
return len(self.items)
Iv. Application
Palindrome (palindrome) is a rhetorical and text game that shares the same words or sentences as reading and reading.
Example:
Madam
Able was I ere I saw elba
Chinese example:
Hua fehua
Everyone for me, everyone for me
If you want to implement a retrieval Verification Algorithm (to verify whether a given string is a retrieval), it is very easy to use the Deque class: to store the string to the double-end queue, at the same time, take out the first and last characters and compare them to determine whether they are equal. If there is a pair of characters, the string is not a background. If all the characters are equal, the string is a background. The Code is as follows:
#! / usr / bin / env python
#-*-coding: utf-8-*-
def palchecker (aString):
chardeque = Deque ()
for ch in aString:
chardeque.addRear (ch)
while chardeque.size ()> 1:
first = chardeque.removeFront ()
last = chardeque.removeRear ()
if first! = last:
return False
return True
if __name__ == '__main__':
str1 = 'able was i ere i saw elba'
print ('"% s" is% s palindrome'% (str1, '' if palchecker (str1) else 'not'))
str2 = u'Everyone is me, I am everybody '
print (u '"% s"% s is a palindrome'% (str2, u '' if palchecker (str2) else u '不'))
str3 = u "What's wrong?"
print (u '"% s"% s is a palindrome'% (str3, u '' if palchecker (str3) else u '不'))
Running result:
$ python palchecker.py
"able was i ere i saw elba" is palindrome
"Everyone for me, I am for everyone" is the palindrome
"What's wrong?"
I hope this article will help you with Python programming.