数据结构与算法----栈和队列(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


相关文章
|
1天前
|
前端开发 JavaScript 算法
JavaScript 中实现常见数据结构:栈、队列与树
JavaScript 中实现常见数据结构:栈、队列与树
|
2天前
|
存储 NoSQL C语言
数据结构——顺序栈与链式栈的实现-2
数据结构——顺序栈与链式栈的实现
数据结构——顺序栈与链式栈的实现-2
|
2天前
|
存储 C语言
数据结构——顺序栈与链式栈的实现-1
数据结构——顺序栈与链式栈的实现
数据结构——顺序栈与链式栈的实现-1
|
2天前
栈的基本应用
栈的基本应用
12 3
|
2天前
栈与队列理解
栈与队列理解
13 1
|
2天前
|
存储 算法
数据结构与算法 栈与队列
数据结构与算法 栈与队列
12 0
数据结构与算法 栈与队列
|
2天前
|
存储 算法 Java
Java数据结构与算法-java数据结构与算法(二)
Java数据结构与算法-java数据结构与算法
122 1
|
2天前
|
机器学习/深度学习 存储 算法
数据结构与算法 动态规划(启发式搜索、遗传算法、强化学习待完善)
数据结构与算法 动态规划(启发式搜索、遗传算法、强化学习待完善)
13 1
|
2天前
|
存储 人工智能 算法
有哪些数据结构与算法是程序员必须要掌握的?——“数据结构与算法”
有哪些数据结构与算法是程序员必须要掌握的?——“数据结构与算法”
|
2天前
|
算法 调度 C++
[数据结构与算法]贪心算法(原理+代码)
[数据结构与算法]贪心算法(原理+代码)