数据结构 02-栈概念、Python 中使用列表 list 实现栈

目      录

1. 栈简介

1.1 栈的概念

1.2 栈的类型

1.2.1 是否能动态增长

1.2.2 栈的实现方式

2. Python 中使用列表 list 实现栈

2.1 栈的常规操作

2.2 栈的代码实现


1. 栈简介

1.1 栈的概念

        栈,英语 Stack,又称为堆栈,是一种特殊的数组或者说列表;可存入数据元素、访问元素、删除元素。它最大的特点是只能允许在栈顶端(top)进行加入数据(动作称为 push)和输出数据(动作称为 pop)。
        它不能按照下标读取数据,任何时候可以访问、删除的元素都是此前最后存入的那个元素,访问顺序是固定的,即后进先出(LIFO, Last In First Out),与顶部对应的端称为“底部”bottom。

1.2 栈的类型

1.2.1 是否能动态增长

        在其他语言中,栈根据是否能动态增长,分为静态栈和动态栈。尤其是 C、Java 中使用固定长度分配内存时候,是静态栈。可以动态的增长栈长度的,是静态栈。

        在 Python 中一般是支持动态增长的,所以多半是动态栈。如果需要实现静态栈,也可以加上限定来实现。

1.2.2 栈的实现方式

        Python 中栈的实现方式一般分两种,一个是使用列表实现,一个是使用链表实现。

        使用列表实现方便快捷,代码实现简单,下面会写出使用列表实现栈的代码,使用链表实现的,会在链表章节进行描述。

2. Python 中使用列表 list 实现栈

2.1 栈的常规操作

        栈的操作包括下面的内容:

  1.         Stack(optional: callable data)       创建一个新的空栈,或者使用可迭代对象初始化栈
  2.         push()        添加一个新的元素 item 到栈顶
  3.         pop()          弹出栈顶 top 元素
  4.         peek()        返回 top 栈顶元素,即只读功能
  5.         is_empty() 判断栈是否为空
  6.         size()         返回栈的元素个数
  7.         __str__()    供 print 函数使用时候直接调用

2.2 栈的代码实现

class Stack(object):
    def __init__(self,vals=None):
        self.stack=[]
        self.stack_size=0
        if(vals ):
            for val in vals:
                self.stack.append(val)
                self.stack_size+=1
    # 压栈
    def push(self,val):
        self.stack.append(val)
        self.stack_size+=1
        return(True)
    
    # 弹出栈顶元素
    def pop(self):
        if(self.stack_size==0):
            return(None)
        else:
            self.stack_size-=1
            return(self.stack.pop())
    
    # 读取栈顶元素
    def peek(self):
        if(self.stack_size==0):
            return(None)
        else:
            return(self.stack[-1])
        
    # 判断栈是否为空
    def is_empty(self):
        if(self.stack_size==0):
            return(True)
        else:
            return(False)
        
    # 获得栈的元素的个数
    def size(self):
        return(self.stack_size)
    
    # 提供给 print 函数
    def __str__(self):
        return("This is a stack ==>{0}".format(self.stack))    
# stack1 
print("*"*16+"create a empty stack"+"*"*16)
stack1=Stack()
print(stack1)
stack1.push(0)
stack1.push(1)
stack1.push(2)
print("*"*16+"push three elements"+"*"*16)
print(stack1)
stack1.pop()
stack1.pop()
print("*"*16+"pop two elements"+"*"*16)
print(stack1)


# stack1 
print("*"*16+"create a  stack as ['a','b','c','d']"+"*"*16)
stack1=Stack(['a','b','c','d'])
print(stack1)
print("*"*16+"judge the stiack is empty"+"*"*16)
print(stack1.is_empty())
print("*"*16+"read the top element"+"*"*16)
print(stack1.peek())
print("*"*16+"get the stack len"+"*"*16)
print(stack1.size())

''

要是大家觉得写得还行,麻烦点个赞或者收藏吧,想个博客涨涨人气,非常感谢!

'''

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江南野栀子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值