数据结构(python)
栈和队列的区别
栈,是一种先进后出的数据结构,
队列,是一种先进先出的数据结构,
栈,有一个指针,指向栈顶元素
队列,有两个指针,一个指向队尾,一个指向队首
栈,只能从顶进,从顶出
队列,从队尾进,从队首出
一、栈
顺序表和链表解决存储问题,实际问题要用栈和队列来完成
1.栈的实现
栈的实现可以用顺序表(list),也可以用链表
8*(2+3)
这个解析式就可以用栈的方法去解析,先计算后面的括号里的
2.栈的操作
非常简单,用顺序表实现
class Stack(object):
'''栈'''
def __init__(self):
self.__list=[] # 构造一个栈:用顺序表(list)做
def push(self,item):
'''添加一个元素item到栈顶'''
self.__list.append(item) #顺序表append添加到尾部,insert(0,item):添加到头部,这里尾部的时间复杂度小,所以用尾部添加。如果是链表则用头部添加。
def pop(self):
'''弹出栈顶元素'''
return self.__list.pop()
def peek(self):
'''返回栈顶元素'''
if self.__list:
return self.__list[-1]
else:
return None
def is_empty(self):
'''判断是否为空'''
return self.__list==[] # 0 () [] {}都为逻辑空
def size(self):
'''返回栈元素的个数'''
return len(self.__list)
if __name__ == '__main__':
s=Stack()
s.push(1)
s.push(2)
s.push(3)
s.push(4)
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
#4 3 2 1
二、队列
1.队列的实现
可以用顺序表(list),也可以用链表
2.队列的操作
class Queue(object):
'''队列'''
def __init__(self):
self.__list=[]
def enquene(self,item):
'''
在队列中添加一个元素
思想:
往队列添加元素时,可以从尾部添加,头部弹出;也可以从头部添加,尾部弹出.时间复杂度都是一个o(1)一个o(n).
要使用哪一个主要看在使用这个队列时,入队用的多还是出对用的多
'''
self.__list.append(item)
def dequene(self):
'''从队列头部删除一个元素'''
return self.__list.pop(0)
def is_empty(self):
return self.__list==[]
def size(self):
return len(self.__list)
if __name__ == '__main__':
q=Queue()
q.enquene(1)
q.enquene(2)
q.enquene(3)
q.enquene(4)
print(q.dequene())
print(q.dequene())
print(q.dequene())
print(q.dequene())
# 1 2 3 4
3.双端队列
4.双端队列操作
class Deque(object):
'''双端队列'''
def __init__(self):
self.__list=[]
def add_front(self,item):
'''往队列添加一个元素,头部添加'''
self.__list.insert(0,item)
def add_rear(self,item):
'''往队列添加一个元素,尾部添加'''
self.__list.append(item)
def pop_front(self):
'''从队列头部删除一个元素'''
return self.__list.pop(0)
def pop_rear(self):
'''从队列头部删除一个元素'''
return self.__list.pop()
def is_empty(self):
return self.__list == []
def size(self):
return len(self.__list)