• 数据结构-栈


    一.栈的基本概念

      栈是一种特殊的线性表,其插入删除操作都只能在表的尾部进行。栈中允许插入、删除操作的一端称为栈顶,另一端称为栈底。通常栈的插入操作叫入栈,栈的删除操作叫做出栈。

      栈的插入和删除操作只允许在栈顶进行,每次入栈的元素即成为栈顶元素,每次最先出栈的总是栈顶元素,所以栈是一种后进先出的线性表。

      

    二.顺序栈

      1.介绍

      顺序栈是用数组实现的,因为入栈和出栈操作都是在栈顶进行的,所以增加变量top来指示栈顶元素的位置,top指向栈顶元素存储位置的下一个存储单元的位置,空栈时top=0。

      2.基本操作

      1)入栈操作

      入栈操作push(x)是将数据元素x作为栈顶元素插入顺序栈中,主要操作如下。

      (1)判断顺序栈是否为满,若满则抛出异常

      (2)将x存入top所指的存储单元位置

      (3)top加1

        def push(self,x):
            """数据元素x入栈"""
            if self.top == self.maxSize:
                raise Exception("栈已满")
            self.stackElem[self.top] = x
            self.top += 1

      2)出栈操作

      出栈操作pop()是将栈顶元素从栈中删除并返回,主要步骤如下:

      (1)判断顺序栈是否为空,若空则返回null

      (2)top减1

      (3)返回top所指的栈顶元素的值 

        def pop(self):
            """将栈顶元素出栈并返回"""
            if self.isEmpty():
                return None
            self.top -= 1
            return self.stackElem[self.top]

      

      3.应用

      利用顺序栈实现括号匹配

        def isMatched(str):
            s = SqStack(100) #申请栈
            for c in str:
                if c == "(":
                    s.push(c) #如果出现了左括号,入栈
                elif c == ")" and not s.isEmpty():
                    s.pop() #如果出现了右括号,且栈不为空,弹出栈顶的左括号
                elif c == ")" and  s.isEmpty():
                    print("括号不匹配") #如果出现了右括号,栈空了,说明右括号多了
                    return False
            if s.isEmpty():
                print("括号匹配成功") 
            else:
                print("括号匹配不成功") #最后栈中有多余的左括号

    三.链栈

      1.介绍

      采用链式存储结构的栈称为链栈,由于入栈和出栈只能在栈顶进行,不存在在栈的任意位置进行插入和删除操作,所以不需要设置头节点,只需要将指针top指向栈顶元素节点

      2.基本操作 

      1)入栈操作

      入栈操作push(x)是将数据域为x的节点插入到链栈的栈顶,主要步骤如下:

      (1)构造数据值域为x的新节点

      (2)改变新节点和首节点的指针域,使新节点成为新的栈顶节点 

        def push(self,x):
            """x入栈"""
            s = Node(x,self.top)
            self.top = s

      

      2)出栈操作

      出栈操作pop()是将栈顶元素从链栈中删除并返回其数据域的值,主要步骤如下。

      (1)判断链栈是否为空,若空则返回null

      (2)修改top指针域的值,返回被删节点的数据域的值

        def pop(self,x):
            """将栈顶元素出栈并返回"""
            if self.isEmpty():
                return None
            p = self.top
            self.top = self.top.next
            return p.data

      

  • 相关阅读:
    201571030330&201571030307《小学四则运算练习软件软件需求说明》结对项目报告
    201571030330 & 201571030307《小学四则运算练习软件》结对项目报告
    201571030307 四则远算
    个人学习总结
    201571030301 /201571030302《小学四则运算练习软件软件需求说明》结对项目报告
    201571030301/201571030302《小学生四则运算练习软件》结对项目报告
    201571030301 四则运算
    初读思考《构建之法-现代软件工程》
    个人学期总结
    201571030313/201571030312《小学四则运算练习软件软件需求说明》结对项目报告
  • 原文地址:https://www.cnblogs.com/jiangfan95/p/12205816.html
Copyright © 2020-2023  润新知