栈
创建栈
创建一个类,类当中的对象具有相同的属性和方法,这里创建一个栈,栈内元素共同的特点就是先进后出
# 定义一个class
class Stack:
#为什么要用init来定义类,参见链接:https://www.cnblogs.com/baxianhua/p/9996676.html
# slist是成员变量,被类当中的所有成员函数可见
def __init__(self, slist):
self.slist = slist
# 输出最上面的值
def StackPop(self):
#pop可以直接叠加,不需要赋值了
return self.slist.pop(self.getStackLen() - 1)
def getStackLen(self):
# 长度
return len(self.slist)
def StackPush(self, new_element):
# 加入一个新元素,该新元素会进入最上面
return self.slist.append(new_element)
def ifEmptyStack(self):
# 需要check是否为空
if self.slist:
return 0
else:
return 1
def StackPeek(self):
# see the front one
return self.slist[self.getStackLen() - 1]
def getStackList(self):
return self.slist
应用创建的栈
排队问题
# import上面的函数
from stack import *
#定义一个新的类,之后可能要用
class Queue:
# see above
def __init__(self, stack_A, stack_B):
self.stack_A = stack_A
self.stack_B = stack_B
#应用了Stack中的append函数
def Enqueue(self, new_element):
self.stack_A.StackPush(new_element)
# 将stackA中的元素放入stackB中并输出,从而使得输出的顺序和输入的顺序一致
def Dequeue(self):
if self.stack_B.ifEmptyStack() == 0:
return self.stack_B.StackPop()
else:
A_len = self.stack_A.getStackLen()
for i in range(A_len):
# A to B
self.stack_B.StackPush(self.stack_A.StackPop())
return self.stack_B.StackPop()
def isEmptyQueue(self):
if self.stack_A.ifEmptyStack() + self.stack_B.ifEmptyStack() == 0:
return 1
else:
return 0
def getQueueLen(self):
if self.stack_A.ifEmptyStack() == 1:
return self.stack_B.getStackPeek()
else:
A_len = self.stack_A.getStackLen()
for i in range(A_len):
self.stack_B.StackPush(self.stack_A.StackPop())
return self.stack_B.StackPeek()
def getStackinQueue(self):
return [self.stack_A.getStackList(), self.stack_B.getStackList()]