python学习笔记5-stack栈

创建栈

创建一个类,类当中的对象具有相同的属性和方法,这里创建一个栈,栈内元素共同的特点就是先进后出

# 定义一个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()]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值