PS:stack和queue是不能通过查询具体某一个位置的元素而进行操作的。但是他们的排列是按顺序的。它们都可以列表或链表实现
一、栈的实现
对于stack我们可以使用python内置的list实现(也可以用链表实现),因为list是属于线性数组,在末尾插入和删除一个元素所使用的时间都是O(1),这非常符合stack的要求。当然,我们也可以使用链表来实现。
class Stack(object):
def __init__(self):
self.stack = []
def push(self, value): # 进栈
self.stack.append(value)
def pop(self): #出栈
if self.stack:
self.stack.pop()
else:
raise LookupError('stack is empty!')
def is_empty(self): # 如果栈为空
return bool(self.stack)
def top(self):
#取出目前stack中最新的元素
return self.stack[-1]
二、队列实现
当然上述连接还阐明了队列可用链表实现,具体实现请自行查看上面的链接,这里具体说下list实现队列
class Queue(object):
#定义一个空队列
def __init__(self):
self.items = []
#队列(只能在队尾)添加一个元素
def enqueue(self, item):
self.items.append(item)
#删除队列(只能在对头)一个元素
def dequeue(self):
self.items.pop(0)
#判断队列是否为空
def isEmpty(self):
return(self.items == [])
#清空队列
def clear(self):
del(self.items) #该队列就不存在了,而不是清空元素
#返回队列项的数量
def size(self):
return(len(self.items))
#打印队列
def print(self):
print(self.items)
if __name__ == '__main__':
q = Queue()
print(q.isEmpty())
for i in range(5):
q.enqueue(i)
print(q.size())
q.print()
q.dequeue()
q.print()
q.clear()
print(q)