一、双端队列的代码实现
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(-1)
def removeRear(self):
return self.items.pop(0)
def size(self):
return len(self.items)
二、双端队列的应用---回文词判定
算法流程:
1.先将需要判定的词从队尾加入deque
2.再从两端同时移除字符串判定是否相同,直到deque中只剩下0个或1个字符
代码实现:
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
三、无序表抽象数据类型
1.链表实现(节点Node)
class Node():
def __init__(self,initdata):
self.data=initdata
self.next=None
def getData(self):
return self.data
def getNext(self):
return self.next
def setData(self,newdata):
self.data=newdata
def setNext(self,newnext):
self.next=newnext
2.以链表实现无序表
可以采用链接节点的方式构建数据集来实现无序表
链表的第一个和最后一个节点最重要!!!
如果想访问到链表中的所有节点,就必须从第一个节点开始沿着节点遍历下去
设置一个属性head,保存对第一个节点的引用,空表的head为None
class UnorderedList:
def __init__(self):
self.head=None
mylist=UnorderedList()
print(mylist.head)#None
随着数据项的加入,无序表的head始终指向链条中的第一个节点
注意!无序表mylist对象本身并不包含数据项(数据项在节点当中)
其中包含的head只是对首个节点的引用,判断空表的isEmpty()很容易实现(return self.head ==None)
2.1实现add方法
根据性能考虑,最便捷的位置是表头
2.2链表实现size方法
size :从链条头head开始遍历到表尾同时用变量累加经过的节点个数(代价O(N))
2.3链表实现search方法
从链表头head开始遍历到表尾,同时判断当前节点的数据项是否目标
2.4 链表实现:remove(item)方法
remove(item)代码