3.基本数据结构-栈(代码片段)

yanghongtao yanghongtao     2022-12-15     743

关键词:

 

一.线性数据结构

  - 我们从四个简单但重要的概念开始研究数据结构。栈,队列,deques(双向队列), 列表是一类数据的容器,它们数据元素之间的顺序由添加或删除的顺序决定。一旦一个数据元素被添加,它相对于前后元素一直保持该位置不变。诸如此类的数据结构被称为线性数据结构。

  - 线性数据结构有两端,有时被称为左右,某些情况被称为前后。你也可以称为顶部和底部,名字都不重要。将两个线性数据结构区分开的方法是添加和移除元素的方式,特别是添加和移除元素的位置。例如一些结构允许从一端添加元素,另一些允许从另一端移除元素。

二.栈

  - 概念:栈(有时称为“后进先出栈”)是一个元素的有序集合,其中添加移除新元素总发生在同一端。这一端通常称为“顶部”。与顶部对应的端称为“底部”。栈的底部很重要,因为在栈中靠近底部的元素是存储时间最长的。最近添加的元素是最先会被移除的。这种排序原则有时被称为 LIFO,后进先出。它基于在集合内的时间长度做排序。较新的项靠近顶部,较旧的项靠近底部。

  - 案例:栈的例子很常见。几乎所有的自助餐厅都有一堆托盘或盘子,你从顶部拿一个,就会有一个新的托盘给下一个客人。想象桌上有一堆书, 只有顶部的那本书封面可见,要看到其他书的封面,只有先移除他们上面的书。下图展示了另一个栈,包含了很多 Python 对象。

技术图片技术图片

  - 栈的分析与应用:

    - 分析:和栈相关的最有用的想法之一来自对它的观察。假设从一个干净的桌面开始,现在把书一本本叠起来,你在构造一个栈。考虑下移除一本书会发生什么。移除的顺序跟刚刚被放置的顺序相反。栈之所以重要是因为它能反转项的顺序。插入跟删除顺序相反。

    - 应用:每个 web 浏览器都有一个返回按钮。当你浏览网页时,这些网页被放置在一个栈中(实际是网页的网址)。你现在查看的网页在顶部,你第一个查看的网页在底部。如果按‘返回’按钮,将按相反的顺序浏览刚才的页面。

三.Python实现栈

  - 栈的抽象数据类型定义:栈的抽象数据类型应该由以下结构和操作定义。栈操作如下: 

    • Stack() 创建一个空的新栈。 它不需要参数,并返回一个空栈。
    • push(item)将一个新项添加到栈的顶部。它需要 item 做参数并不返回任何内容。
    • pop() 从栈中删除顶部项。它不需要参数并返回 item 。栈被修改。
    • peek() 从栈返回顶部项,但不会删除它。不需要参数。 不修改栈。
    • isEmpty() 测试栈是否为空。不需要参数,并返回布尔值。
    • size() 返回栈中的 item 数量。不需要参数,并返回一个整数。

  - 代码实现:Python 中的列表类提供了有序集合机制和一组方法。例如,如果我们有列表 [2,5,3,6,7,4],我们只需要确定列表的哪一端将被认为是栈的顶部。一旦确定,可以使用诸如 append 和 pop 的列表方法来实现操作。

技术图片
class Stack:
     def __init__(self):
         self.items = []

     def isEmpty(self):
         return self.items == []

     def push(self, item):
         self.items.append(item)

     def pop(self):
         return self.items.pop()

     def peek(self):
         return self.items[len(self.items)-1]

     def size(self):
         return len(self.items)
技术图片

  - 应用:

技术图片
from basic.stack import Stack

s=Stack()

print(s.isEmpty())
s.push(4)
s.push(‘dog‘)
print(s.peek())
s.push(True)
print(s.size())
print(s.isEmpty())
s.push(8.4)
print(s.pop())
print(s.pop())
print(s.size())
技术图片

 

 
 
 

数据结构3.栈和队列(代码片段)

目录3.1栈3.1.1栈的基本概念(1)栈的定义(2)栈的基本操作3.1.2栈的顺序存储结构(1)顺序栈的实现(2)栈的基本运算(3)共享栈3.1.3栈的链式存储结构3.2队列3.2.1队列的基本概念(1)队列的定义(2)队列常见的基本操作3.2.2... 查看详情

(王道408考研数据结构)第三章栈和队列-第一节:栈基本概念顺序栈和链栈基本操作(代码片段)

文章目录一:栈基本概念(1)栈的定义(2)压栈和出栈(3)进栈出栈变化形式(4)栈的操作二:栈的顺序存储结构及其操作实现(1)顺序栈的定义(2)进栈(3)出... 查看详情

3.1栈的顺序存储结构(代码片段)

<?phpheader("content-type:text/html;charset=utf-8");/***栈的顺序存储结构的基本操作**包括*1.顺序栈的初始化__contruct()*2.销毁栈destroyStack()*3.清空栈clearStack()*4.判断栈是否为空stackEmpty()*5.获取栈顶元素getTop()*6.进栈操作push()*7.出栈操作pop() 查看详情

数据结构-栈(代码片段)

目录前言一、栈的概念与结构二、C语言-栈的基本操作与实现1.栈的创建2.栈的初始化3.入栈4.出栈5.获取栈顶元素6.获取栈中有效元素个数7.检测栈是否为空8.销毁栈三、栈的经典使用1.问题叙述2.解题方法3.代码实现前言本文均基于... 查看详情

王道3.1顺序栈以及链式栈(代码片段)

顺序栈以及链式栈一、的基本概念二、栈的储存三、顺序栈的基本操作四、链式栈的基本操作一、的基本概念1.栈只允许在一段进行删除或插入操作的线性表2.三个术语①栈顶top:线性表允许进行插入删除的那一端②栈底bottom... 查看详情

《数据结构与算法》-3-栈和队列(代码片段)

...构4.3矩阵的压缩存储?该系列博客的目的是为了学习一遍数据结构中常用的概念以及常用的算法,为笔试准备;主要学习过程参考王道的《2018年-数据结构-考研复习指导》;已总结章节:《数据结构与算法》-1-绪论《数据结构与... 查看详情

基本数据结构--栈详解(代码片段)

  栈是一种后进先出的线性表,是最基本的一种数据结构,在许多地方都有应用。 一、什么是栈  栈是限制插入和删除只能在一个位置上进行的线性表。其中,允许插入和删除的一端位于表的末端,叫做栈顶(top),不... 查看详情

栈和队列及其背后的数据结构(代码片段)

文章目录一、栈(Stack)1.栈的基本概念2.用顺序表实现栈3.用链表实现栈4.有关栈的相关面试题例一:不可能的输出序列例二:中缀表达式转后缀表达式例三:有效的括号例四:最小栈二、队列(Queue)1.队列的基本概念2... 查看详情

数据结构与算法(代码片段)

数据结构与算法一、基本概念1.1、数据结构起源1.2、数据结构1.3、数据结构基本概念1.4、数据结构三要素1.5、数据结构三个方面二、线性表(逻辑结构)2.1、线性表的概念2.2、顺序表2.3、链表2.4、顺序表vs链表2.5、双链表... 查看详情

数据结构初阶:栈和队列(代码片段)

文章目录栈和队列1栈1.1栈的定义和结构栈结构体定义1.2栈的实现栈初始化和销毁栈的压入和弹出获取栈顶元素其他基本接口2队列2.1队列的定义和结构队列结构体定义2.2队列的实现队列初始化和销毁队尾入队和队头出队获取队头... 查看详情

3)数据结构之线性表(栈与队列)(代码片段)

目录栈与队列的本质栈的基本概念栈的物理结构栈的顺序存储结构(用数组实现)静态栈的实现: Stack.h中Test/c中Stack.c中输出结果动态栈的实现 Stac.h中Test.c中Stack.c中栈的链式存储结构(使用链表实现) Stack... 查看详情

数据结构之栈以及栈的基本操作(代码片段)

...和删除操作的线性表。在软件中,栈的这种后进先出数据结构的应用是非常普遍的。比如我们在使用浏览器时,浏览器都有一个“后退键”ÿ 查看详情

数据结构栈的简单理解和基本操作(代码片段)

前言:本章介绍的主要内容是数据结构中栈的概念和栈的基本操作,包括:栈结构的定义、初始化、容量检查、判空、入栈、出栈、读取栈顶元素、读取栈内元素个数、栈的销毁等操作的具体实现。文章目录1.为什么... 查看详情

stl和基本数据结构(代码片段)

栈和stack stack<Type>s;//定义栈,Type为数据类型,例如int,float,char等s.push(item);//把item放到栈顶s.top();//返回栈顶的元素,但不会删除s.pop();//删除栈顶的元素,但不会返回,在出栈时需要进行两步操作//先top()获得栈顶元素,... 查看详情

数据结构c语言版——栈的实现(代码片段)

文章目录栈1.基本概念2.栈的实现1)初始化栈2)栈的扩容3)判断栈是否为空4)入栈5)出栈6)获取栈顶元素7)获取栈中元素个数8)销毁栈栈1.基本概念栈(Stack):一种特殊的线性表,其只限定于在表尾进行插入或者删除操作。进行数... 查看详情

java集合与数据结构栈和队列(代码片段)

Java集合与数据结构栈和队列栈(Stack)基本方法栈的习题出栈顺序不可能中缀表达式转后缀表达式(逆波兰式)手动实现栈队列(Queue)基本方法链表实现队列循环队列用队列实现栈用栈实现队列括号匹配问题实现一个最小栈... 查看详情

jvm系列-03精通运行时数据区私有区域---虚拟机栈程序计数器本地方法栈(代码片段)

...rticle/details/129544460【二】jvm的类加载子系统以及jclasslib的基本使用https://blog.csdn.net/zhenghuishengq/article/details/129610963【三】运行时私有区域之虚拟机栈、程序计数器、本地方法栈https://blog.csdn.net/zhenghuishengq/article/details/129684076精通... 查看详情

数据结构——栈和队列相关算法实现(代码片段)

数据结构栈和队列的基本算法实现限定性线性表——栈栈的定义栈作为一种限定性的线性表,是将线性表的插入和删除操作限制为仅在表的一端进行。基本算法演示/*栈的常见操作:1.初始化栈2.元素进栈3.元素出栈4.栈的遍历5.判... 查看详情