python完成栈的基本操作,压栈,出栈、计算栈长

在python中不存在指针,所有需要进行链栈的操作时,自己初始化一个栈的结点类,其中定义栈每一个结点的属性,一个next,一个数据;后边的队列和二叉树的完成使用同样的原理,自己定义每一个数据结构的结点属性值

顺序栈的操作

'''栈的基本操作'''

class StackList(object):

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

    #判断是否为空
    def is_empty(self):
        return self._item == []

    #出栈
    def put(self):
        return self._item.pop()

    #入栈
    def push(self,_stack):
        return self._item.append(_stack)

    #拿取栈顶元素
    def peek(self):
        return self._item[len(self._item) - 1]

    #计算栈的长度
    def size(self):
        return len(self._item)

if __name__ == '__main__':
    s=StackList()
    print('初始栈是否为空:',s.is_empty())
    s.push("A")
    s.push("B")
    s.push("C")
    s.push("D")
    s.push("E")
    s.push("F")
    print('进栈之后判断是否为空:',s.is_empty())
    print('栈的长度:',s.size())
    print('栈顶元素:',s.peek())
    print('出栈元素:',s.put())
    print('出栈之后的栈顶元素:',s.peek())

链栈的基本操作

'''链栈的完成'''

#定义链栈的结点
class StackNode(object):

    def __init__(self):
        self._stadata = None
        self._stanext = None


class Stack(object):

    def __init__(self):
        #初始化一个top指针
        self._top = StackNode()
        # 初始化一个栈元素个数变量
        self._size = 0

    #判栈空
    def is_empty(self):
        if self._top == None:
            return True
        else:
            return False

    #栈元素个数
    def sizeStack(self):
        return self._size

    #进栈
    def pushStack(self,stack_data):
        #定义一个栈结点
        stackNode = StackNode()
        #进栈的元素赋值
        stackNode._stadata = stack_data
        #元素指针移动
        stackNode._stanext = self._top._stanext
        #top指针指向加入的元素
        self._top._stanext = stackNode
        #栈元素个数+1
        self._size += 1
        return

    #出栈
    def putStack(self):
        #判断栈是否为空
        if self.is_empty():
            return 'there is no element'
        else:
            #出栈元素为top指针的next指向的元素
            stackNode = self._top._stanext
            #top指针移动
            self._top._stanext = stackNode._stanext
            #栈元素个数-1
            self._size -= 1
            #返回出栈元素
            return stackNode._stadata

    #获取栈顶元素
    def peekStack(self):
        #判断栈是否为空
        if self.is_empty():
            return 'there is no element'
        else:
            return self._top._stadata


if __name__ == '__main__':
    s = Stack()
    count = 0
    for i in range(ord('A'),ord('Z')+1):
        count += 1
        s.pushStack(chr(i))
    print('进栈完栈元素个数:',s.sizeStack())
    print('出栈元素:',end='')
    for i in range(1,count+1):
        print(s.putStack(),end=' ')
    print('\n出栈完栈元素个数:', s.sizeStack())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值