python之数据结构与算法(数据结构篇)-- 栈

news2024/11/21 21:09:18

380bf5f4514a46859ee75788591a2631.png


一、栈的概念

9dfb0595bc5841eca433e85255c0b8ac.png

       这里我们不去了解教科书上面的“教条概念”,其实“栈”的概念和古代的时候的“客栈”是有异曲同工之妙的。

        在这里我们把客栈看成“栈”,旅客看作“栈元素”

1.当旅客进来住店时,叫做“入栈”;

2.当旅客退房时,叫做“出栈”;

3.当客栈里面都住满了旅客时,叫做“栈满”;

4.当客栈里面一个旅客也没有的时候,叫做“栈空”;

         这里我们去创建一个“羊村栈”,去进行操作演示整个过程,以别于更好理解


二、栈实现思路

1.初始化一个空列表用于存储“羊村栈”

class sheep_village_stack:
    def __init__(self):
        self.sheep = []  # 初始化一个空列表用于存储“羊村栈”

2.检查栈是否为空

def is_empty(self):
        return len(self.sheep) == 0  # 检查栈是否为空

3.添加一只羊到栈顶

 def push(self, sheep):
        self.sheep.append(sheep)  # 添加一只羊到栈顶

4.移除并返回栈顶的羊

def pop(self):
        if not self.is_empty():
            return self.sheep.pop()  # 移除并返回栈顶的羊
       

5.如果栈为空,则抛出异常

 else:
            raise IndexError("羊村小栈为空")  # 如果栈为空,则抛出异常

6.返回栈顶的羊,但不移除它

def peek(self):
        if not self.is_empty():
            return self.sheep[-1]  # 返回栈顶的羊,但不移除它

7.如果栈为空,则抛出异常

else:
            raise IndexError("羊村小栈为空")  # 如果栈为空,则抛出异常

8.返回栈中羊的数量

def size(self):
        return len(self.sheep)  # 返回栈中羊的数量

9.创建一个羊村小栈实例

# 创建一个羊村小栈实例
stack = sheep_village_stack()

10.加入喜羊羊、美羊羊、慢羊羊

# 加入喜羊羊、美羊羊、慢羊羊
stack.push('喜羊羊')
stack.push('美羊羊')
stack.push('慢羊羊')

11.输出当前栈的大小

# 输出当前栈的大小
print("当前栈的大小:", stack.size())  # 应输出 3

12.查看栈顶的羊

# 查看栈顶的羊
print("栈顶的羊是:", stack.peek())  # 应输出 '慢羊羊'

13.出栈操作

# 出栈操作
print("出栈的羊是:", stack.pop())  # 应输出 '慢羊羊'
print("出栈的羊是:", stack.pop())  # 应输出 '美羊羊'

14.再次查看栈顶的羊

# 再次查看栈顶的羊
print("现在栈顶的羊是:", stack.peek())  # 应输出 '喜羊羊'

15.最后出栈

# 最后出栈
print("最后出栈的羊是:", stack.pop())  # 应输出 '喜羊羊'

16.尝试从空栈中出栈

# 尝试从空栈中出栈
try:
    print(stack.pop())
except IndexError as e:
    print(e)  # 应输出 "羊村小栈为空"

三、python代码实现

class sheep_village_stack:
    def __init__(self):
        self.sheep = []  # 初始化一个空列表用于存储“羊村栈”

    def is_empty(self):
        return len(self.sheep) == 0  # 检查栈是否为空

    def push(self, sheep):
        self.sheep.append(sheep)  # 添加一只羊到栈顶

    def pop(self):
        if not self.is_empty():
            return self.sheep.pop()  # 移除并返回栈顶的羊
        else:
            raise IndexError("羊村小栈为空")  # 如果栈为空,则抛出异常

    def peek(self):
        if not self.is_empty():
            return self.sheep[-1]  # 返回栈顶的羊,但不移除它
        else:
            raise IndexError("羊村小栈为空")  # 如果栈为空,则抛出异常

    def size(self):
        return len(self.sheep)  # 返回栈中羊的数量

# 创建一个羊村小栈实例
stack = sheep_village_stack()

# 加入喜羊羊、美羊羊、慢羊羊
stack.push('喜羊羊')
stack.push('美羊羊')
stack.push('慢羊羊')

# 输出当前栈的大小
print("当前栈的大小:", stack.size())  # 应输出 3

# 查看栈顶的羊
print("栈顶的羊是:", stack.peek())  # 应输出 '慢羊羊'

# 出栈操作
print("出栈的羊是:", stack.pop())  # 应输出 '慢羊羊'
print("出栈的羊是:", stack.pop())  # 应输出 '美羊羊'

# 再次查看栈顶的羊
print("现在栈顶的羊是:", stack.peek())  # 应输出 '喜羊羊'

# 最后出栈
print("最后出栈的羊是:", stack.pop())  # 应输出 '喜羊羊'

# 尝试从空栈中出栈
try:
    print(stack.pop())
except IndexError as e:
    print(e)  # 应输出 "羊村小栈为空"

四、HYTML可视化实现

f63c7d8e96f74461aef6efdd51ae3494.png

效果展示

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>羊村角色栈的可视化</title>
<style>
  body {
    font-family: Arial, sans-serif;
    margin: 20px;
    text-align: center;
  }
  .container {
    max-width: 600px;
    margin: 0 auto;
    text-align: left;
  }
  .input-group {
    margin-bottom: 20px;
  }
  .input-group label {
    display: block;
    margin-bottom: 5px;
  }
  .input-group select {
    width: 100%;
    padding: 10px;
    font-size: 16px;
  }
  .input-group button {
    padding: 10px 20px;
    font-size: 16px;
    cursor: pointer;
  }
  .result-group {
    border: 2px solid #ccc;
    padding: 15px;
    background-color: #f9f9f9;
  }
  .result-item {
    margin-bottom: 10px;
  }
</style>
</head>
<body>
<h1>羊村角色栈的可视化</h1>

<div class="container">
  <div class="input-group">
    <label for="stackSelect">选择要入栈的角色:</label>
    <select id="stackSelect">
      <option value="喜羊羊">喜羊羊</option>
      <option value="美羊羊">美羊羊</option>
      <option value="沸羊羊">沸羊羊</option>
      <option value="懒羊羊">懒羊羊</option>
      <option value="暖羊羊">暖羊羊</option>
    </select>
    <button onclick="push()">入栈 (Push)</button>
  </div>

  <div class="input-group">
    <button onclick="pop()">出栈 (Pop)</button>
  </div>

  <div class="input-group">
    <button onclick="peek()">查看栈顶 (Peek)</button>
  </div>

  <div class="result-group">
    <h3>当前栈的状态</h3>
    <ul id="stackDisplay"></ul>
  </div>
</div>

<script>
// 初始化栈
let stack = [];

// 更新栈显示
function updateStackDisplay() {
  const stackDisplay = document.getElementById('stackDisplay');
  stackDisplay.innerHTML = '';
  for (let i = stack.length - 1; i >= 0; i--) {
    const li = document.createElement('li');
    li.textContent = stack[i];
    stackDisplay.appendChild(li);
  }
}

// 入栈操作
function push() {
  const value = document.getElementById('stackSelect').value;
  if (value) {
    stack.push(value);
    updateStackDisplay();
  } else {
    alert("请选择一个角色");
  }
}

// 出栈操作
function pop() {
  if (stack.length > 0) {
    stack.pop();
    updateStackDisplay();
  } else {
    alert("栈为空,无法出栈");
  }
}

// 查看栈顶操作
function peek() {
  if (stack.length > 0) {
    alert(`栈顶元素是: ${stack[stack.length - 1]}`);
  } else {
    alert("栈为空,没有栈顶元素");
  }
}
</script>

</body>
</html>

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2231818.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java调用chatgpt

目前openai的chatgpt在国内使用有一定难度&#xff0c;不过国内的大模型在大部分情况下已经不弱于chatgpt&#xff0c;而且还更便宜&#xff0c;又能解决国内最敏感的内容安全问题。本文后续以spring ai调用国内chatgpt厂商实现为例&#xff0c;讲解怎么构建一个java调用chatgp…

web前端多媒体标签设置(图片,视频,音频)以及图片热区(usemap)的设置

多媒体标签运用 在HTML中有以下常见多媒体标签&#xff1a; <img> &#xff08;图像标签&#xff09; - 作用&#xff1a;用于在网页中嵌入图像。 - 示例&#xff1a; <img src"image.jpg" alt"这是一张图片"> 。其中 src 属性指定图像的…

安卓开发之数据库的创建与删除

目录 前言&#xff1a;基础夯实&#xff1a;数据库的创建数据库的删除注意事项 效果展示&#xff1a;遇到问题&#xff1a;如何在虚拟机里面找到这个文件首先&#xff0c;找到虚拟机文件的位置其次&#xff0c;找到数据库文件的位置 核心代码&#xff1a; 前言&#xff1a; 安…

基于SSM+微信小程序的订餐管理系统(点餐2)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM微信小程序的订餐管理系统实现了管理员和用户。管理端实现了 首页、个人中心、用户管理、菜品分类管理、菜品信息管理、订单信息管理、配送信息管理、菜品评价管理、订单投诉管理、…

《AI在企业战略中的关键地位:以微软和阿里为例》

内容概要 在当今商业环境中&#xff0c;人工智能&#xff08;AI&#xff09;的影响力如滔滔洪水&#xff0c;愈演愈烈。文章将揭示AI在企业战略中的崛起&#xff0c;尤其以微软和阿里巴巴为代表的企业&#xff0c;这两家科技巨头通过不同方式&#xff0c;将智能技术融入其核心…

华为荣耀曲面屏手机下面空白部分设置颜色的方法

荣耀部分机型下面有一块空白区域&#xff0c;如下图红框部分 设置这部分的颜色需要在themes.xml里面设置navigationBarColor属性 <item name"android:navigationBarColor">android:color/white</item>

【ESP32】ESP-IDF开发 | I2C从机接收i2c_slave_receive函数的BUG导致程序崩溃解决(idf-v5.3.1版本)

1. 问题 在调试I2C外设的demo时&#xff0c;按照官方文档的描述调用相关API&#xff0c;烧录程序后发现程序会不断崩溃&#xff0c;系统log如下。 初步分析log&#xff0c;原因是访问到了不存在的地址。一开始我以为是自己的代码问题&#xff0c;反反复复改了几次都会出现同样的…

企业数字化转型实施中的挑战与解决方案:架构引领的战略路径

在企业推动数字化转型的过程中&#xff0c;通常会面临复杂的挑战。随着技术的不断演进和业务环境的变化&#xff0c;企业架构&#xff08;Enterprise Architecture, EA&#xff09;成为帮助企业应对这些挑战的关键工具。通过提供一个全面的战略蓝图&#xff0c;EA使企业能够在保…

桑基图在医学数据分析中的更复杂应用示例

桑基图&#xff08;Sankey Diagram&#xff09;能够有效地展示复杂的流动关系&#xff0c;特别适合用于医学数据分析中的多种转归和治疗路径的可视化。接下来&#xff0c;我们将构建一个稍微复杂的示例&#xff0c;展示不同疾病患者在治疗过程中的流动&#xff0c;以及他们的治…

[SICTF Round4] PWN

这PWN题似乎是给我出的&#xff0c;4个一血1个2血。密码又过于简单。逆向太难了又不大会。 Stack fengshui main可以溢出覆盖rbpret所以它每一步都需要移栈。 可用的ROP里没有pop rdi,在4004c0里有错位的01 5d c3 &#xff1a;add DWORD PTR [rbp-0x3d], ebx 并且有对应的p…

消息中间件类型介绍

ActiveMQ&#xff1a; ActiveMQ可是个老将了&#xff0c;它功能全面、稳定可靠&#xff0c;还支持多种协议和编程语言。如果你需要一个兼容性好、易于集成的消息中间件&#xff0c;ActiveMQ可是个不错的选择。 RabbitMQ&#xff1a; RabbitMQ以其简单易用和高性能著称。它支持丰…

【设计模式系列】组合模式(十二)

目录 一、什么是组合模式 二、组合模式的角色 三、组合模式的典型应用 四、组合模式在Mybatis SqlNode中的应用 4.1 XML映射文件案例 4.2 Java代码使用案例 一、什么是组合模式 组合模式&#xff08;Composite Pattern&#xff09;是一种结构型设计模式&#xff0c;其核…

Ghidra无头模式(自动化批处理执行重复性任务)

Ghidra无头模式&#xff08;自动化批处理执行重复性任务&#xff09; 与Ghidra GUI探索单个项目中的单个文件不同&#xff0c;Ghidra headless analyzer&#xff08;Ghidra无头分析器&#xff09;更加适合批处理和用脚本控制Ghidra。 &#xff08;一&#xff09;启动analyzeHea…

【大众点评】店铺评论 加密参数生成逆向分析

点击好评 https://www.dianping.com/ajax/json/shopDynamic/allReview 分析参数_token 直接搜_token 共17个&#xff0c;优先看和请求相关的 给第一个_token打上断点&#xff0c;然后切换评论&#xff0c;就直接断住了 n h(i, e.sendData) _token: n 现在给它打上断点&am…

Fsm3

采用读热码编写方式&#xff1a; module top_module(input clk,input in,input areset,output out); ////reg [3:0]A 4d0001;// reg [3:0]B 4d0010;//reg [3:0]C 4d0100;// reg [3:0]D 4d1000; //1、首先用读热码定义四个状态变量parameter A 4d0001 ,B 4d0010, C 4d01…

在腾讯云服务器上部署MaxKB项目(基于LLM大语言模型的知识库问答系统)

前言 一&#xff0c; MaxKB介绍 MaxKB是基于LLM大语言模型的知识库问答系统&#xff0c;旨在成为企业的最强大脑。它支持开箱即用&#xff0c;无缝嵌入到第三方业务系统&#xff0c;并提供多模型支持&#xff0c;包括主流大模型和本地私有大模型&#xff0c;为用户提供智能问…

【大众点评】加密参数生成逆向分析

点击好评 https://www.dianping.com/ajax/json/shopDynamic/allReview 分析参数_token 直接搜_token 共17个&#xff0c;优先看和请求相关的 给第一个_token打上断点&#xff0c;然后切换评论&#xff0c;就直接断住了 n h(i, e.sendData) _token: n 现在给它打上断点&am…

【Python+Pycharm】2024-Python安装配置教程

【PythonPycharm】2024-Python安装配置教程 一、下载装 Python 1、进入Python官网首页&#xff0c;下载最新的Python版本 Download Python | Python.org 选择对应版本下载 安装 测试安装情况 python如果安装失败 在系统环境变量添加安装路径 where pythonwin7安装路径添加…

Python中如何计算整商:详解整除运算及其应用场景

目录 一、整除运算的基本概念 1. 语法 2. 工作原理 二、整除运算的详细解析 1. 整数之间的整除 2. 浮点数之间的整除 3. 整数与浮点数之间的整除 三、整除运算的应用场景 1. 数据处理中的取整操作 2. 循环中的步进控制 3. 分页显示数据 4. 时间计算中的取整 四、整…

sql注入——靶场Less1

?id1 ?id99union select 1,2,3-- 查看占位 ?id1 order by 3-- 尝试出表有几列 ?id1 order by 4-- 说明只有三列 ?id99 union select 1,database(),3-- 查询当前使用的数据库的名称 ?id99 union select 1,group_concat(table_name),3 from information_schema.tables …