本文为学习笔记,感兴趣的读者可在MOOC中搜索《数据结构与算法Python版》或阅读《数据结构(C语言版)》(严蔚敏)。
目录链接:https://blog.csdn.net/floating_heart/article/details/123991211
1.3.1 双端队列Deque
双端队列Deque是一种有次序的数据集
跟队列相似,其两端可以称作“首”“尾”端,但deque中数据项既可以从队首加入,也可以从队尾加入;数据项也可以从两端移除。
某种意义上说,双端队列集成了栈和队列的能力
双端队列不具有内在得LIFO或者FIFO
Deque定义的操作:
**Deque():**创建一个空双端队列
**addFront(item):**将item加入队首
**addRear(item):**将item加入队尾
**removeFront():**从队首移除数据项,返回值为移除的数据项
**removeRear():**从队尾移除数据项,返回值为移除的数据项
**isEmpty():**返回deque是否为空
**size():**返回deque中包含数据项的个数
实现
代码:Python
class Deque:
def __init__(self) -> None:
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)
代码:JavaScript
class Deque {
constructor() {
this.items = []
}
isEmpty() {
return this.items.length == 0
}
addFront(item) {
this.items.push(item)
}
addRear(item) {
this.items.unshift(item)
}
removeFront() {
return this.items.pop()
}
removeRear() {
return this.items.splice(0, 1)[0]
}
size(){
return this.items.length
}
}
export{Deque}
1.3.2 回文词判定
问题描述:
“回文词”指正读和反读都一样的词,如12321、“上海自来水来自海上”、radar等。
判断一句话是否为回文词。
算法说明:
先将需要判定的词从队尾加入deque;
再从两端同时移除字符判定是否相同,直到deque中剩下0个或1个字符。
实现:
代码:Python
from 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('12321'))
代码:JavaScript
import { Deque } from './Deque.js'
function palChecker(aString) {
let chardeque = new Deque()
for (let ch of aString) {
chardeque.addRear(ch)
}
let stillEqual = true
while (chardeque.size() > 1 && stillEqual) {
let first = chardeque.removeFront()
let last = chardeque.removeRear()
if (first != last) {
stillEqual = false
}
}
return stillEqual
}
console.log(palChecker('121'))