一、栈的定义

"栈"者,存储货物或供旅客住宿的地方,如客栈。栈房。可引申为仓库、中转站货栈。所以引入到计算机领域里,就是指数据暂时存储的地方,所以才有进栈、出栈
的说法。

栈是一种运算受限的线性表,是限定仅在表头进行插入和删除操作的线性表。能进行插入和删除操作的一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。由于运算的限制,所以栈存储数据是符合先进后出的原则,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个压入的数据是被第一个读出来的)。
在这里插入图片描述

栈作为一种限定仅在表头进行插入和删除操作的线性表,栈强调的是一种数据操作的方式,至于内部的存储即可以采用顺序存储也可以采用链式存储,根据需要选择即可。故栈可以分为顺序栈和链式栈,即采用顺序表实现的栈为顺序栈,采用链表实现的为链式栈。

二、用python实现栈

利用顺序表的存储方式实现栈,在此用python中的list来实现栈

class Stack(object):
    '''定义栈'''
    #初始化
    def __init__(self):
        #用list存储数据,初始时没有数据,为空列表
        self.__list = []

    def push(self,item):
        '''添加一个元素到栈顶,即压栈、入栈。考虑用顺序表存储数据,从列表尾部添加效率高,即以列表尾为栈顶'''
        self.__list.append(item)

    def pop(self):
        '''弹出栈顶元素,列表尾部为栈顶,故用list的pop()方法'''
        return self.__list.pop()

        
    def peek(self):
        '''返回栈顶元素,即列表最后一个元素,注意判断栈是否为空'''
        if self.__list:
            return self.__list[-1]
        else:
            return None

       
    def is_empty(self):
        '''判断栈是否为空'''
        return self.__list == []


    def size(self):
        '''返回栈内的元素个数'''
        return len(self.__list)
if __name__=='__main__':
    s=Stack()
    res=s.is_empty()
    print(res)
    
    s.push(1)
    s.push(2)
    s.push('jack')
    l=s.size()
    print(l)
    
    print(s.peek())
    print(s.pop())
    print(s.peek())
True
3
jack
jack
2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值