栈
我们知道,顺序表呢在Python中可以看作list和tuple。
仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
作者:yongxinz
链接:https://juejin.im/post/5cdc2321e51d453a543f9e67
来源:掘金
而栈与顺序表不同的是:必须后进先出(LIFI)
class Stack(object):
def __init__(self):
self._val = []
#压入元素
def push(self,val):
self._val.append(val)
#弹出元素,而且会删除
def pop(self):
return self._val.pop()
#返回栈顶元素
def peek(self):
return self._val[self.size()-1]
#判断是否为空
def is_empty(self):
return self._val == None
#返回元素个数
def size(self):
return len(self._val)
if __name__ == '__main__':
stack = Stack()
stack.push(2)
stack.push(3)
stack.push(4)
stack.push(5)
tmp = stack.pop()
print(tmp)
print(stack.peek())
print(stack.size())
print(stack.is_empty())
###结果
5
4
3
False
[Finished in 0.2s]
队列
它的特点就是先进先出(FIFO)
进行插入操作的端(进入的端)称为队尾,进行删除操作的端(出去的端)称为队头。队列中没有元素时,称为空队列。
class Queue(object):
def __init__(self):
self._val = []
#添加元素
def push(self,val):
self._val.insert(0, val)
#删除元素
def pop(self):
return self._val.pop()
#返回栈顶元素
# is_empty() 判断一个队列是否为空
def is_empty(self):
return self._val == []
# size() 返回队列的大小
def size(self):
return len(self._val)
if __name__ == '__main__':
queue = Queue()
queue.push(1)
queue.push(2)
queue.push(3)
queue.push(4)
print(queue.pop())
print(queue.pop())
print(queue.pop())
print(queue.size())
print(queue.is_empty())
###结果
1
2
3
1
False
[Finished in 0.2s]
双端队列
双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。双端队列可以在队列任意一端入队和出队。
class Double(object):
def __init__(self):
self._val = []
#对头插入元素
def add_front(self,val):
self._val.insert(0,val)
#队尾插入
def add_rear(self,val):
self._val.append(val)
# remove_front() 从队头删除一个item元素
def remove_front(self):
return self._val.pop(0)
# remove_rear() 从队尾删除一个item元素
def remove_rear(self):
return self._val.pop()
# is_empty() 判断双端队列是否为空
def is_empty(self):
return self._val == []
# size() 返回队列的大小
def size(self):
return len(self._val)
def print_items(self):
print(self._val)
if __name__ == '__main__':
deque = Double()
deque.add_front(1)
deque.add_front(3)
deque.add_front(5)
deque.print_items()
deque.add_rear(9)
deque.add_rear(8)
deque.add_rear(7)
deque.print_items()
print(deque.is_empty())
print(deque.remove_front())
print(deque.remove_rear())
deque.print_items()
###结果
[5, 3, 1]
[5, 3, 1, 9, 8, 7]
False
5
7
[3, 1, 9, 8]
[Finished in 0.2s]