您的位置:首页 > 编程语言 > Python开发

Python用List实现栈和队列

2018-03-22 23:05 447 查看

栈的实现

class Stack():

def __init__(self):
self.items = [] # 初始化一个列表

def is_empty(self):
# 如果为空则返回True 否则返回False
return self.items == []

def pop(self):
try:
return self.items.pop()
except:
raise

def push(self, item):
self.items.append(item)

def peek(self):
# 返回栈顶的元素
return self.items[len(self.items)-1]

def size(self):
return len(self.items)


队列的实现

class Queue():

def __init__(self):
self.items = []

def is_empty(self):
return self.items == []

def enqueue(self, item):
# 从队尾插入
self.items.insert(0, item)

def dequeue(self):
try:
# 从队首弹出
return self.items.pop()
except:
raise

def peek(self):
return self.items[0]

def size(self):
return len(self.items)


用两个栈实现队列的操作

思路:

因为栈是先进后出的,队列是先进先出的。那么,设两个栈分别为s1和s2。

当进行入队的时候,可以直接在s1上进行压栈的操作;

当进行出队的时候,因为是先进要先出,因此可以将s1的元素倒出到s2中,然后在s2进行弹栈的操作;

# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
# 初始化两个栈
self.stack1 = []
self.stack2 = []
def push(self, node):
# 直接在s1进行弹栈
self.stack1.append(node)
def pop(self):
# 如果s2不为空,则直接进行弹栈
if self.stack2:
return self.stack2.pop()
# 如果s2为空,则返回寻找s1中的元素
elif not self.stack1:
# 如果s1为空,则返回空置,没有元素可以弹出
return None
else:
# 否则将s1的元素倒入到s2中,再弹栈
while self.stack1:
self.stack2.append(self.stack1.pop())
return self.stack2.pop()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python