数据结构链表之栈

栈的概述

  • 定义:栈是一种基于先进后出(FILO)的数据结构,是一种只能在一段进行插入和删除操作的特殊线性表。
  • 引入名词:将数据存入栈的动作称为压栈,将数据取出栈的动作称为弹栈
  • 栈的特点:先进入栈的元素会被压入栈底,最后一位元素所处的位置就是栈顶,弹栈时最后一个元素最先被读取,依次往下取出,因此叫做First In Last Out

栈可以用顺序表(python中列表)实现,也可以用链表实现,这里实现的方式的是使用链表,有兴趣的同学可以自己编写代码用列表实现栈

python代码实现:

class Node:def __init__(self, item):self.item = itemself.next = Noneclass Stack:def __init__(self):self.head = Noneself.len = 0def is_empty(self):return not self.len# def length(self):#     return self.lendef push(self, item):"""Push an element into the stack"""node = Node(item)node.next = self.headself.head = nodeself.len += 1def pop(self):"""Pop a value from the stack top"""# if not self.head:#     raise IndexError("pop from empty list")cur = self.headif self.head:self.head = self.head.nextself.len -= 1return cur# Make the Stack iterabledef __iter__(self):self.cur = self.head# if not self.cur:#     raise StopIteration   # The error here will be raised if the condition were reachedreturn selfdef __next__(self):if not self.cur:raise StopIteration  # The error here actually won't be raisedtry:temp = self.curself.cur = self.cur.nextreturn tempexcept AttributeError as e:raise StopIteration

主要实现的功能:

  1. is_empty()判断栈是否为空
  2. length()同len属性,可以返回栈的长度
  3. push()向栈压入元素
  4. pop()从栈顶取出一个元素
  5. 重写的__iter__()和__next__()用于实现栈的遍历功能

功能验证

if __name__ == "__main__":stack = Stack()print(f"Is empty? {stack.is_empty()}")print("Push elements into the stack:")stack.push('a')stack.push('b')stack.push('c')stack.push('d')# Iterate the stackfor item in stack:print(item.item, end=' ')print(f"\nPop a value from the top stack: {stack.pop().item}")print(f"The number(length) of the remanent nodes is: {stack.len}")

输出结果:

Is empty? True
Push elements into the stack:
d c b a
Pop a value from the top stack: d
The number(length) of the remanent nodes is: 3

数据结构链表之栈,Python3简单实现——5相关推荐

  1. 数据结构链表之栈——解决括号匹配问题和逆波兰表达式求值问题——6

    括号匹配问题和逆波兰表达式求值问题 基于上一节已经使用python代码对栈进行了简单的实现,这一节我们在其基础上解决两个常见的问题 案例 括号匹配问题(点我直接到代码实现) 逆波兰表达式求值问题(点我 ...

  2. C语言中用链表构建栈讲解,C语言数据结构之使用链表模拟栈的实例

    C语言数据结构之使用链表模拟栈的实例 以下是"使用链表模拟栈"的简单示例: 1. 用C语言实现的版本 #include #include typedef char datatype ...

  3. 数据结构--顺序表、链表、栈、队列、树、文件(visual studio可运行)

    顺序表的顺序存储(增删查) #include <stdio.h> #include <stdlib.h> #define MaxSize 50 typedef int Elem ...

  4. Java实现自定义队列和树结构_Java数据结构之链表、栈、队列、树的实现方法示例...

    本文实例讲述了java数据结构之链表.栈.队列.树的实现方法.分享给大家供大家参考,具体如下: 最近无意中翻到一本书,闲来无事写几行代码,实现几种常用的数据结构,以备后查. 一.线性表(链表) 1.节 ...

  5. 数据结构 - 栈(链表实现栈的入栈出栈)

    学完链表和栈,数组模拟栈学完后,自己根据链表写了个链栈,虽然只是简单的实现了入栈出栈遍历.收获还是很大的. 在push这里思考了一会,思路是:传入一个数字,push里创建一个节点node,把数据加入n ...

  6. 基于java的数据结构学习——数组实现的栈以及简单应用C++实现

    基于java的数据结构学习--数组实现的栈以及简单应用的 C++ 实现 源码: // // Created by PC-Saw on 2019/1/3. //#ifndef DATA_STRUCTUR ...

  7. 数据结构栈的简单实现(JAVA)

    新的改变 栈是线性数据结构的一种,相当于一个箱子,如果向往箱子里放书,第一本书肯定是放入箱底,但是取出来的时候是从最上面开始取的,并拿不到最里面的东西,所以元素是先进后出的,栈最上面的元素为栈顶元素. ...

  8. 用链表,栈,队列实现简单的停车场项目

    学习了链表,栈,队列之后写了一个停车场项目,但是功能还不是太完善,时间忘了插入,通过咨询别人,完善了时间函数,完成了这个项目. 问题描述:停车场是一个能放 n 辆车的狭长通道,只有一个大门,汽车按到达 ...

  9. C语言单链表实现栈(stack)数据结构

    栈 1.栈是限定仅在表尾进行插入和删除操作的线性表.把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom). 2.栈是先进后出(LIFO)结构. 3.栈的插入叫进栈/压栈Push,删 ...

最新文章

  1. LeetCode实战:字符串相加
  2. UpSetR 高级参数使用教程
  3. 【Linux】—— /usr/bin/perl 被 MySQL-community-server-8.0.26-1.el7.x86_64 需要,解决方法
  4. 计算机编译原理 张,计算机编译原理概念总结
  5. “网友”叫你先上STM32,51是小朋友玩的,所以你就不学51了
  6. svn客户端删除服务器文件,怎么使用Tortoise SVN客户端上传删除文件、创建删除文件夹...
  7. Git笔记总结(详细) —— 廖雪峰教程
  8. 利用1stOpt进行方程拟合与参数优化
  9. 笔记本电脑频繁自动重启_如何解决电脑频繁自动重启
  10. 嵌入式到底应该选择驱动开发,还是应用开发?
  11. Iphone的Wallet中如何移除电子登机牌凭证
  12. 那些年,我们遇到的傻X问题
  13. 背景图页面缩小会变形_CSS背景图拉伸不变形
  14. Netron 可视化
  15. Centos7 源码编译安装linux longterm 内核4.19.47
  16. 安装cuda11.1
  17. 国密算法TF32A09硬件加密芯片
  18. Service注入不进去
  19. 30V转5V,30V转3.3V,30V转3V的5款降压芯片和LDO
  20. 网心科技获得深圳市“专精特新”中小企业认定

热门文章

  1. python爬虫常见反爬措施_爬虫常见的反爬措施有哪些
  2. jmeter压力测试_用Jmeter实现对接口的压力测试
  3. django 与 vue 的完美结合
  4. cad多段线画圆弧方向_CAD箭头怎么画
  5. 使用docker部署mysql主从复制集群
  6. xcode8注释快捷键失效问题
  7. Hibernate学习笔记③
  8. swagger core 和 swagger ui 如何关联【窥探】
  9. JSON数据格式以及与后台交互数据转换实例
  10. Symbian中的新手问题整理(二)