第一部分:栈
一.定义
栈(stack),也称堆栈,是一种容器,可存入数据元素、访问元素、删除元素。只允许在一端(栈顶端指标,top)进行加入(push)数据和输出(pop)数据的运算。任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默认的访问顺序。栈数据结构只允许在一端进行操作,按照后进先出(LIFO, Last In First Out)的原理运作。
二.栈的实现(以顺序表为例)
class Stack(object):
"""栈"""
def __init__(self):
self._list = []
def is_empty(self):
"""判断是否为空"""
return self._list == []
def push(self, item):
"""加入元素"""
self._list.append(item)
def pop(self):
"""弹出元素"""
if self._list:
return self._list.pop()
else:
return None
def peek(self):
"""返回栈顶元素"""
if self._list:
return self._list[-1]
else:
return None
def size(self):
"""返回栈的大小"""
return len(self._list)
if __name__ == "__main__":
stack = Stack()
stack.push("hello")
stack.push("world")
stack.push("itcast")
print (stack.size())
print (stack.peek())
print (stack.pop())
print (stack.pop())
print (stack.pop())
第二部分:队列
一.定义
队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。是一种先进先出的(First In First Out)的线性表,简称FIFO。
允许插入的一端为队尾,允许删除的一端为队头。
二.双端队列的实现(以顺序表为例)
双端队列(deque,全名double-ended queue),是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。双端队列可以在队列任意一端入队和出队。
普通队列则是一边入另一边出,在代码实现上,只需将双端队列的一端入队和另一端出队删除即可。
class Deque(object):
"""双端队列"""
def __init__(self):
self._list = []
def is_empty(self):
"""判断队列是否为空"""
return self._list == []
def add_front(self, item):
"""在队头添加元素"""
self._list.insert(0,item)
def add_rear(self, item):
"""在队尾添加元素"""
self._list.append(item)
def remove_front(self):
"""从队头删除元素"""
return self._list.pop(0)
def remove_rear(self):
"""从队尾删除元素"""
return self._list.pop()
def size(self):
"""返回队列大小"""
return len(self._list)
if __name__ == "__main__":
deque = Deque()
deque.add_front(1)
deque.add_front(2)
deque.add_rear(3)
deque.add_rear(4)
print (deque.size())
print (deque.remove_front())
print (deque.remove_front())
print (deque.remove_rear())
print (deque.remove_rear())
备注:
1.rear----后面的,尾部