数据结构与算法----栈和队列(Stack & Queue)(一)

简介: 数据结构与算法----栈和队列(Stack & Queue)

写在前面:在学习栈和队列前我先强调一下,栈和队列都是一种编程思想,实现方式有很多种,我们只需要满足栈和队列各自的条件就可以,不必拘泥写一个类



栈是限定仅在表尾进行插入和删除的线性表,允许插入、删除的一端是栈顶,另一端成为栈低,不含任何数据元素的栈称为空栈。


假设S = [x1,x2,x3,x4,x5....xn],x1为栈底元素,xn为栈顶元素,插入和删除只能从xn端操作,进栈只能是按x1,x2,x3,x4,x5....xn的顺序进栈,出栈只能从栈顶出栈,也就是说,先进的数据元素后出去,后进的数据元素先出去。后进先出(LIFO last in fist out)


e90e203c62f4422e82c0e233d3ebe7a4.png


栈的操作


这里我们先创建一个栈的类,这里我们只是将基础的框架搭建了起来,并没有写具体的函数内容,后面再讲解的时候会具体说明。


# 第一个讲解我们使用的是顺序栈,具体的情况后面会有详细的介绍。
class SequenceStack:
    """顺序栈"""
    def __init__(self):
        """初始化"""
        self.stack_arr = []  # 栈空间,用列表
        self.top = 0         # 指针,指向栈顶
        self.maxsize = 10    # 设置栈的最大长度
    def push(self):
        """入栈"""
        pass
    def pop(self):
        """出栈"""
        pass
    def gethead(self):
        """得到栈顶的元素"""
        pass
    def isempty(self):
        """判断栈是否为空"""
        pass
    def size(self):
        """栈中的元素"""
        pass
    def next(self):
        """从栈顶遍历到栈底"""
        pass
    def clear(self):
        """清空栈"""
        pass


栈的初始化


栈的初始化就是创建一个空的栈,在本文章中栈的初始化就是创建sequencestack对象


stack = SequenceStack()


入栈


将新的元素添加到栈顶的位置,top指针向上移1


b69d6290d8604efaaf9fc1d44aaa4454.png


代码实现


    def push(self,arg):
        """入栈"""
        if self.top + 1 >= self.maxsize:
            print("栈已满,请重新选择操作")
            return 
        self.stack_arr.append(arg)
        self.top+=1


出栈


删除栈顶的数据元素



代码实现


    def pop(self):
        """出栈"""
        if self.top < 0:
            print("栈以空无法出栈")
            return
        self.top -= 1
        return self.stack_arr.pop()


取栈顶的元素


取栈顶的数据元素,但是不会影响栈的内容


a1ca9b4464d74dc592de89eb3b0e52bf.png


代码实现


    def gethead(self):
        """得到栈顶的元素"""
        if self.top < 0:
            print("栈以空")
            return
        return self.stack_arr[self.top]


判断栈是否为空


判断栈是否为空


84f8b05b5d8a4d59b6b5941f9247da50.png


代码实现


    def isempty(self):
        """判断栈是否为空"""
        if len(self.stack_arr) == 0:
            return True
        else:
            return False


遍历栈中的所有元素


依次访问栈中的元素


89d895311d6e487294fa95199b2b9997.png


代码实现


def next(self):
        """从栈顶遍历到栈底"""
        for i in self.stack_arr:
            print(i)


清空栈


清空栈中的所有内容


3f35c0dcb6e440bbaa226de0d419fc76.png

代码实现


    def clear(self):
        """清空栈"""
        self.stack_arr.clear()
        self.top = -1


相关文章
|
16天前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
91 9
|
1月前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
65 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
1月前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
30 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
19天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
1月前
初步认识栈和队列
初步认识栈和队列
59 10
|
1月前
【数据结构】-- 栈和队列
【数据结构】-- 栈和队列
16 0
|
1月前
探索数据结构:队列的的实现与应用
探索数据结构:队列的的实现与应用
|
1月前
|
存储 C语言
栈和队列题目练习
栈和队列题目练习
16 0
|
7天前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
16 1
|
10天前
|
存储 算法 Java
数据结构的栈
栈作为一种简单而高效的数据结构,在计算机科学和软件开发中有着广泛的应用。通过合理地使用栈,可以有效地解决许多与数据存储和操作相关的问题。