栈结构实现
栈可以用顺序表实现,也可以用链表实现。
栈的操作
- Stack() 创建一个新的空栈
- push(item) 添加一个新的元素item到栈顶
- pop() 弹出栈顶元素
- peek() 返回栈顶元素
- is_empty() 判断栈是否为空
- size() 返回栈的元素个数
这里我们用python的list来实现栈的操作
class Stack(object): """栈""" def __init__(self): self.__list = [] def is_empty(self): """判断是否为空""" return self.__list == [] #return not self.__list def push(self, item): """加入元素""" self.__list.append(item) #可以选择从栈顶或栈底推入,这里我们选择从list尾部插入,时间复杂度为O(1);从头部则要改为.append(0, item) O(n) def pop(self): """弹出元素""" return self.__list.pop() 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("itcast") print stack.size() print stack.peek() print stack.pop() print stack.pop() print stack.pop()
队列
一端进一端出
# coding:utf-8 class Queue(object): """队列""" def __init__(self): self.__list = list() def enqueue(self, item): """往队列中添加元素""" self.__list.append(item) def dequeue(self): """从队列头部删除一个元素""" return self.__list.pop(0) def is_empty(self): """判空""" return not self.__list def size(self): """返回一个队列长度""" return len(self.__list) if __name__ == "__main__": q = Queue() q.enqueue(1) q.enqueue(2) q.enqueue(3) q.enqueue(4) q.enqueue(5) print(q.size()) print(q.dequeue()) print(q.size()) print(q.is_empty())
双端队列
一端可以进也可以出,另一端可以进也可以出
# coding:utf-8 class Dequeue(object): """双端队列""" def __init__(self): self.__list = list() def add_front(self, item): """往队列头部添加元素""" self.__list.insert(0, item) def add_rear(self, item): """往队列尾部添加元素""" self.__list.append(item) def remove_front(self): """从队列头部删除一个元素""" self.__list.pop(0) def remove_rear(self): """从队列尾部删除一个元素""" return self.__list.pop() def is_empty(self): """判空""" return not self.__list def size(self): """返回一个队列长度""" return len(self.__list)