IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构 02-栈概念、Python 中使用列表 list 实现栈 -> 正文阅读

[数据结构与算法]数据结构 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())

''

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

'''

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:48:42  更:2022-03-24 00:51:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 11:57:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码