美文网首页
数据结构—栈的简单应用

数据结构—栈的简单应用

作者: 小白要打怪 | 来源:发表于2020-05-04 15:33 被阅读0次

最近决心重拾数据结构,从头深入学习理解一遍,由于最近使用最多语言是lua,因此以下示例皆使用lua语言

栈:它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
后入先出是它的特点

local stack = {}

stack.init = function(self)
    self.data = {}
end

stack.empty = function(self)
    self.data = {}
end

stack.isEmpty = function(self)
    if self:length() == 0 then
        return true
    else
        return false
    end
end

stack.destory = function(self)
    self.data = {}
end

stack.length = function(self)
    return #self.data
end

stack.getTop = function(self)
    return self.data[#self.data]
end

stack.push = function(self, size)
    table.insert(self.data, size)
end

stack.pop = function(self)
    local data_size = #self.data
    local ele = self.data[data_size]
    table.remove(self.data, data_size)
    return ele
end

return stack

应用举例:
1、数制转换
十进制N和其他d进制的转换是计算机实现计算的基本问题,其解决方法很多,其中一个简单算法基于下列原理:
N=(N div d)* d + (N mod d) -- div:整除 mod:求余
只要迭代地 X除以h,直到商为0,将 每次得到的余数 倒序排列 ,这便是短除法的原理
实现:

local function binary_conversion(N, d)
    while N/d ~= 0 do
        stack.push(stack, math.fmod(N,d))
        N = math.floor(N / d)
    end

    local str = ""
    for i = stack:length(),1,-1 do
        str = str .. stack:pop()
    end
    return str
end

2、括号匹配的检测
假设表达式中允许包含三种括号,其嵌套顺序随意,检验括号是否匹配可用”期待的急迫程度“这个概念来描述,例如考虑下列括号序列
[ ( [ ] [ ] ) ]
12345678
当计算机接受了第一个括号后,它期待着与其匹配的第八个括号的出现,然而等来的却是第二个括号,此时第一个括号只能暂时靠边,而迫切等待与第二个括号匹配的第七个括号”)“的出现,类似的,因等来的第三个括号"[",其期待匹配的程度较第二个更紧迫,第二个也只能靠边。再接受了第四个括号后,第三个括号的期待得到满足,消解之后,第二个成为最紧迫的。。。以此类推,可见,这个处理过程与栈的特点相吻合

local function check_brackets(content)
    local length = string.len(content)
    for i=1,length do
        local bite = string.sub(content, i ,i)
        if is_left(bite) then
            stack:push(bite)
        elseif is_right(bite) then
            if not stack:isEmpty() then
                local top = stack:getTop()
                if is_match(top ,bite) then
                    stack:pop()
                else
                    return false, i
                end
            else
                return false,i
            end
        end
    end
    return stack:isEmpty()
end

相关文章

  • 常见的数据结构-栈结构的介绍

    栈结构 栈也是一种非常常见的数据结构, 并且在程序中的应用非常广泛. 一. 认识栈结构 我们先来简单认识一下栈结构...

  • 数据结构—栈的简单应用

    最近决心重拾数据结构,从头深入学习理解一遍,由于最近使用最多语言是lua,因此以下示例皆使用lua语言 栈:它是一...

  • 栈和队列

    栈和队列是两种应用非常广泛的数据结构,它们都来自线性表数据结构,都是“操作受限”的线性表。 栈 栈(Stack):...

  • Java数据结构-栈-简单应用

    1,三种表达式 1)三种表达式四则运算的三种表达方式,用于四则运算表达式求值中缀表达式:(3+4)*5-6后缀表达...

  • python-030-实现栈结构-用数组-适配器设计模式

    栈是最简单的数据结构,但也是最重要的数据结构。它出现在很多不同的应用中,在更复杂的数据结构和算法中充当工具。从形式...

  • 队列和栈的应用

    队列和栈的使用 标签(空格分隔): algorithm 队列和栈的应用 1.队列的应用 队列是一种常见的数据结构,...

  • 前端-算法1:栈、队列、链表

    栈 一个先进后出的数据结构JS中没有栈,用Array实现栈的功能进栈: push 出栈:pop栈的应用场景: 十进...

  • 004-数据结构与算法-栈和递归的关系

    栈的应用-递归 上一节我们讲到了栈这种数据结构,那么在实际编程中有哪些应用呢?这篇文章我们来研究一下栈的一种应用-...

  • 栈的应用

    栈的应用 栈是一种先进后出的数据结构,这个我相信大家很好理解。那下面我就通过两个栈的实际应用来帮助大家更好的理解栈...

  • 栈的数据结构 栈数据结构方面特点是数据具有先进后出的特点,下面是用数组简单实现了栈的基本方法 概念 运行原理 问题...

网友评论

      本文标题:数据结构—栈的简单应用

      本文链接:https://www.haomeiwen.com/subject/mbxyghtx.html