首页 > 其他分享 >数据结构-栈

数据结构-栈

时间:2024-04-13 16:33:56浏览次数:17  
标签:items self pop empty 数据结构 stack def

数据结构-栈

1. 定义:

栈是一种只能在一端进行插入和删除操作的线性数据结构。它遵循后进先出(LIFO, Last In First Out)的原则,即最后插入的元素将是第一个被移除的

class Stack:
    def __init__(self):
        self.items = []

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

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

    def pop(self):
        if not self.is_empty():
            return self.items.pop()
        else:
            raise IndexError("pop from an empty stack")

    def peek(self):
        if not self.is_empty():
            return self.items[-1]
        else:
            raise IndexError("peek from an empty stack")

    def size(self):
        return len(self.items)

# 示例用法
if __name__ == "__main__":
    stack = Stack()
    stack.push(1)
    stack.push(2)
    stack.push(3)
    print("Stack:", stack.items)
    print("Size:", stack.size())
    print("Peek:", stack.peek())
    print("Pop:", stack.pop())
    print("Stack after pop:", stack.items)

2. 主要操作:

栈的主要操作包括push(添加元素到栈顶)、pop(从栈顶移除元素)和peek(查看栈顶元素),以及isEmpty(检查栈是否为空)。

  • push
def push(self, item):
        self.items.append(item)  # 添加至列表末尾,类似于栈
  • pop
def pop(self):
        if not self.is_empty(): 
            return self.items.pop()  # 删除列表的末尾元素
  • peek
def peek(self):
        if not self.is_empty():
            return self.items[-1]
        else:
            raise IndexError("peek from an empty stack")
  • isEmpty
def is_empty(self):
        return self.items == []

注:

  1. 使用 self.items == [] 来检查栈是否为空。这种方式的逻辑是,如果栈为空,那么 self.items 应该是一个空列表 [],因此通过 self.items == [] 来判断栈是否为空是合适的。
  2. 如果我们使用 None 来表示空栈,那么在检查栈是否为空时,我们需要使用 self.items is None。但是,这样做会带来一些问题。
  3. 在初始化栈时,我们将 self.items 设置为一个空列表 [],而不是 None。因此,检查栈是否为空时,使用 self.items is None 会导致不一致,因为 self.items 实际上不是 None。
  4. 使用 None 来表示空栈可能会引入额外的复杂性。因为 None 是一个特殊的对象,它与其他值的比较和操作可能会导致意外的行为。在这种情况下,使用一个明确的标记来表示空栈(例如空列表 [])会更加清晰和直观。
  5. 因此,为了简化逻辑并避免潜在的问题,我们选择使用 self.items == [] 来检查栈是否为空。

3. 特性:

由于栈是一种严格的LIFO数据结构,它的主要特性是顺序性和受限的访问。这意味着只能访问栈的顶部元素,无法直接访问栈中的其他元素。Python 中可以使用列表(List)来实现栈,利用列表的 append() 方法在末尾添加元素,以及 pop() 方法移除并返回末尾元素,实现了栈的基本操作。这种实现方式简单高效,适用于大多数场景。

4. 应用:

栈在许多计算任务中非常有用,包括但不限于实现函数调用(调用栈)、处理递归、后缀表达式求值和语法分析等。

5. 实现方式:

栈可以通过数组或链表实现。数组实现的栈具有固定大小,而链表实现的栈则具有动态大小。

标签:items,self,pop,empty,数据结构,stack,def
From: https://www.cnblogs.com/zx-demo/p/18133032

相关文章

  • 数据结构-堆
    数据结构-堆1.定义:堆是一种特殊的完全二叉树。在堆中,所有的父节点都满足特定的顺序关系(大于或小于)与它们的子节点。这种属性使得堆在处理优先级队列和排序操作时非常有效。2.类型:常见的两种类型的堆是最大堆和最小堆。在最大堆中,每个父节点的值都大于或等于其子节点的值;而在......
  • 数据结构-哈希表
    数据结构-哈希表1.定义:哈希表(也称为散列表)是一种使用哈希函数组织数据,以支持快速插入和搜索的数据结构。它通过将键映射到表中一个位置来访问记录,从而加快访问速度。#创建一个空字典hash_table={}#向哈希表中添加键-值对hash_table['apple']=10hash_table['banana'......
  • 数据结构-链表
    数据结构-链表1.链表的基本概念:链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向列表中下一个节点的引用(或指针)。2.单向链表:单向链表的每个节点只有一个指向下一个节点的链接。这种结构使得遍历只能单向进行,从头节点开始到尾节点结束。classNode:d......
  • 数据结构基础概念
    数据结构基础概念数据结构概念数据结构是计算机科学中用于组织和存储数据的方式。它定义了数据之间的关系,提供了一组操作以访问和修改数据。选择合适的数据结构对于解决特定问题至关重要,不同的数据结构适用于不同的应用场景。以下是数据结构的基本概念:数据元素:数据结构中的基......
  • 数据结构知识框架
    数据结构知识框架B树平衡的多叉树性质根结点至少有两个孩子每个非根结点至少有M/2(上取整)个孩子,至多有M个孩子每个非根结点至少有M/2-1(上取整)个关键字,并且以升序排列key[i]和key[i+1]之间的孩子结点的值介于key[i]、key[i+1]之间所有的叶子结点都在同一层B+树性质......
  • 后缀数据结构
    byDuck.后缀数组参考:后缀数组简介-OIWiki后缀数组(SuffixArray,SA)可以在\(\mathcal{O}(n\logn)\)的复杂度内对\(S\)的每个后缀进行字典序排序。记后缀\(i\)表示后缀\(S[i,n]\)。SA的核心在于得到两个数组\(sa,rk\)。\(sa_i\)表示字典序排名为\(i\)的后缀位......
  • 数据结构(图)
    图是一种非线性数据结构,由顶点(节点)和边组成,用于描述不同对象之间的关系。在图中,顶点表示对象,边表示对象之间的关系,可以是有向的(箭头表示方向)也可以是无向的(没有方向)。图的定义包括以下几个重要概念:顶点(Vertex):图中的节点,可以表示对象或实体。边(Edge):连接顶点的线,表示顶点之间的关......
  • 数据结构(堆)
    堆就是用数组实现的二叉树,所以它没有使用父指针或者子指针。堆根据“堆属性”来排序,“堆属性”决定了树中节点的位置。堆的常用方法:构建优先队列支持堆排序快速找出一个集合中的最小值(或者最大值)在朋友面前装逼堆属性堆分为两种:最大堆和最小堆,两者的差别在于节点的排序方......
  • C#开发用到的数据结构
    引用:https://zhuanlan.zhihu.com/p/193997869数据结构graphLR数据结构-->线性结构-->数组线性结构-->顺序表线性结构-->链表线性结构-->栈线性结构-->队列数据结构-->非线性结构非线性结构---->树形结构树形结构-->二叉树二叉树-->二叉查找树二叉树-->红黑树树形......
  • 几种常用数据结构的C语言实现
    队列/*********************************************************************************@file:myfifo.c*@brief:先入先出队列实现*@author:huanglidi*****************************************************************......