栈及其简单应用(python代码)

栈属于线性结构(Linear Struncture),要搞清楚这个概念,首先要明白”栈“原来的意思,如此才能把握本质。"栈“者,存储货物或供旅客住宿的地方,可引申为仓库、中转站,所以引入到计算机领域里,就是指数据暂时存储的地方,所以才有进栈、出栈的说法。在众多算法中,栈作为一种数据结构,应用广泛。


一、栈的特性

栈是一种有次序的数据项集合,在栈中,数据的加入和移除都仅发生在一端,如下图。

                                  

 

 

 简单来说它就是存放数据的一种容器,不过这个容器有些特别,就像一个量筒,只能一端进出(push和pop),由于这种特殊的容器结构,栈就有了一个很重要的特性,后进先出(Last in First out),想象一下,把一个个鹌鹑蛋依次放入下面的量筒里,当再次把鹌鹑蛋取出来时,只能从最上面一个开始取出。

                                                        

 

 在生活中我们也能经常碰到栈这种特性的地方,比如word文档里面的撤回,浏览器页面的返回上一页。

 

二、定义一个栈

我们知道了栈的特性和功能,接下来我们就来定义一个栈。

 

//我们定义一个Stack类
class
Stack: def __init__(self): self.items = [] //初始化一个空的列表,存放数据,下面栈的操作会基于列表的一些方法来定义,如append,pop等 def isEmpty(self): return self.items == [] //判断栈是否为空,返回True或者False def push(self,item): self.items.append(item) // push操作,数据入栈,如上文中的把鹌鹑蛋放入量筒def pop(self): return self.items.pop() //pop 操作,出栈,把最后入栈的数据从栈内删除,列表的pop方法删除列表最后一个数据。 def peek(self): return self.items[len(self.items)-1] //返回栈内最后入栈的数据,也就是栈顶的数据,这个操作和下面的size方法一样,不修改栈。 def size(self): return len(self.items) //栈内还剩多少数据

我们首先实例化Stack类:

s = Stack()
s.isEmpty()
s.push("a")
s.push(1)
s.push(2)
s.size()
s.peek()
s.pop()
s.pop()
s.pop()
 

 

 

 结果如下:

 

 

 三、栈的简单应用

括号判定,括号一般都是成对出现,如果位置错乱或者不成对,括号不能左右刚好消除,则括号判定为False,比如“(()()(”,而"((()))",括号左右能消除,判定为True。

在这个一判定的过程中,我们要从左到右扫描,扫描到“(”,我们并不能及时处理,而是要看看是否有与其对应的“)”,那么此时便需要一个暂时放“(”的地方,这个地方就是栈。

def parChecker(symbolString):
    s=Stack()
    balanced = True
    index = 0
    while index < len(symbolString) and balanced:
        symbol = symbolString[index]
        if symbol == "(":
            s.push(symbol)

        else:
            if s.isEmpty():
                balanced = False
            else:
                s.pop()

        index = index + 1

    if balanced and s.isEmpty():
        return True

    else:
        return False


print(parChecker("(((())))"))

 

代码参考慕课《数据结构与算法python版》

 

posted @ 2020-07-21 11:39  清减几分  阅读(351)  评论(0)    收藏  举报