数据结构链表之栈,Python3简单实现——5
数据结构链表之栈
栈的概述
- 定义:栈是一种基于先进后出(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
主要实现的功能:
- is_empty()判断栈是否为空
- length()同len属性,可以返回栈的长度
- push()向栈压入元素
- pop()从栈顶取出一个元素
- 重写的__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相关推荐
- 数据结构链表之栈——解决括号匹配问题和逆波兰表达式求值问题——6
括号匹配问题和逆波兰表达式求值问题 基于上一节已经使用python代码对栈进行了简单的实现,这一节我们在其基础上解决两个常见的问题 案例 括号匹配问题(点我直接到代码实现) 逆波兰表达式求值问题(点我 ...
- C语言中用链表构建栈讲解,C语言数据结构之使用链表模拟栈的实例
C语言数据结构之使用链表模拟栈的实例 以下是"使用链表模拟栈"的简单示例: 1. 用C语言实现的版本 #include #include typedef char datatype ...
- 数据结构--顺序表、链表、栈、队列、树、文件(visual studio可运行)
顺序表的顺序存储(增删查) #include <stdio.h> #include <stdlib.h> #define MaxSize 50 typedef int Elem ...
- Java实现自定义队列和树结构_Java数据结构之链表、栈、队列、树的实现方法示例...
本文实例讲述了java数据结构之链表.栈.队列.树的实现方法.分享给大家供大家参考,具体如下: 最近无意中翻到一本书,闲来无事写几行代码,实现几种常用的数据结构,以备后查. 一.线性表(链表) 1.节 ...
- 数据结构 - 栈(链表实现栈的入栈出栈)
学完链表和栈,数组模拟栈学完后,自己根据链表写了个链栈,虽然只是简单的实现了入栈出栈遍历.收获还是很大的. 在push这里思考了一会,思路是:传入一个数字,push里创建一个节点node,把数据加入n ...
- 基于java的数据结构学习——数组实现的栈以及简单应用C++实现
基于java的数据结构学习--数组实现的栈以及简单应用的 C++ 实现 源码: // // Created by PC-Saw on 2019/1/3. //#ifndef DATA_STRUCTUR ...
- 数据结构栈的简单实现(JAVA)
新的改变 栈是线性数据结构的一种,相当于一个箱子,如果向往箱子里放书,第一本书肯定是放入箱底,但是取出来的时候是从最上面开始取的,并拿不到最里面的东西,所以元素是先进后出的,栈最上面的元素为栈顶元素. ...
- 用链表,栈,队列实现简单的停车场项目
学习了链表,栈,队列之后写了一个停车场项目,但是功能还不是太完善,时间忘了插入,通过咨询别人,完善了时间函数,完成了这个项目. 问题描述:停车场是一个能放 n 辆车的狭长通道,只有一个大门,汽车按到达 ...
- C语言单链表实现栈(stack)数据结构
栈 1.栈是限定仅在表尾进行插入和删除操作的线性表.把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom). 2.栈是先进后出(LIFO)结构. 3.栈的插入叫进栈/压栈Push,删 ...
最新文章
- LeetCode实战:字符串相加
- UpSetR 高级参数使用教程
- 【Linux】—— /usr/bin/perl 被 MySQL-community-server-8.0.26-1.el7.x86_64 需要,解决方法
- 计算机编译原理 张,计算机编译原理概念总结
- “网友”叫你先上STM32,51是小朋友玩的,所以你就不学51了
- svn客户端删除服务器文件,怎么使用Tortoise SVN客户端上传删除文件、创建删除文件夹...
- Git笔记总结(详细) —— 廖雪峰教程
- 利用1stOpt进行方程拟合与参数优化
- 笔记本电脑频繁自动重启_如何解决电脑频繁自动重启
- 嵌入式到底应该选择驱动开发,还是应用开发?
- Iphone的Wallet中如何移除电子登机牌凭证
- 那些年,我们遇到的傻X问题
- 背景图页面缩小会变形_CSS背景图拉伸不变形
- Netron 可视化
- Centos7 源码编译安装linux longterm 内核4.19.47
- 安装cuda11.1
- 国密算法TF32A09硬件加密芯片
- Service注入不进去
- 30V转5V,30V转3.3V,30V转3V的5款降压芯片和LDO
- 网心科技获得深圳市“专精特新”中小企业认定