美文网首页
03Stack栈

03Stack栈

作者: Jachin111 | 来源:发表于2020-09-13 20:20 被阅读0次

数据结构=数据+存储方式+操作
数据 存储什么数据?如int,string类型
存储方式 如何组织数据,数据之间的关系?
操作 如何快速的读取查询数据,写入数据到数据结构中?

不要求数据的顺序:维护成本低,比如List列表
要求数据的顺序:维护成本高,使用成本低,比如排序的List


后进先出(LIFO)的线性数据结构

栈的操作
push 放入一个元素
pop 弹出一个元素
top 获取栈顶元素
empty 判断栈是否为空

栈的实现
使用基于List实现Stack

class Stack:
    def __init__(self):
        self.stack = []

    def push(self, x):
        self.stack.append(x)

    def pop(self):
        return self.stack.pop()

    def top(self):
        return self.stack[-1]

    def isEmpty(self):
        return len(self.stack) == 0


s = Stack()
s.push(1)
s.pop()
s.push(2)
print(s.top())
s.pop()
print(s.isEmpty())
s.push(3)
print(s.isEmpty())

用LinkedList实现Stack

class LinkedNode:
    def __init__(self, value, next=None, prev=None):
        self.val = value
        self.next = next
        self.prev = prev


class Stack:
    def __init__(self):
        self.head = LinkedNode(None)
        self.tail = LinkedNode(None, None, self.head)
        self.head.next = self.tail

    def push(self, x):
        node = LinkedNode(x, self.tail, self.tail.prev)
        self.tail.prev.next = node
        self.tail.prev = node

    def pop(self):
        if self.isEmpty():
            return
        node = self.tail.prev
        node.prev.next = self.tail
        self.tail.prev = node.prev

    def top(self):
        if self.isEmpty():
            return -1
        return self.tail.prev.val

    def isEmpty(self):
        return self.head.next == self.tail and self.tail.prev == self.head


s = Stack()
s.push(1)
s.pop()
s.push(2)
print(s.top())
s.pop()
print(s.isEmpty())
s.push(3)
print(s.isEmpty())

给定一个字符串所表示的括号序列,包含以下字符: '(', ')', '{', '}', '[' and ']', 判定是否是有效的括号序列。
括号必须依照 "()" 顺序表示, "()[]{}" 是有效的括号,但 "([)]" 则是无效的括号。

class Solution:
    def isValidParentheses(self, s):
        stack = []
        for c in s:
            if c in ['(', '[', '{']:
                stack.append(c)
            else:
                if len(stack) == 0:
                    return False
                if stack[-1] == '(' and c != ')':
                    return False
                if stack[-1] == '[' and c != ']':
                    return False
                if stack[-1] == '{' and c != '}':
                    return False
                stack.pop()
        return len(stack) == 0


s = Solution()
print(s.isValidParentheses('()[]{}'))

相关文章

  • 03Stack栈

    数据结构=数据+存储方式+操作数据 存储什么数据?如int,string类型存储方式 如何组织数据,数据之...

  • Java实现栈

    数组栈:压栈、出栈、返回栈顶元素 链式栈:压栈、出栈、返回栈顶元素

  • 数据结构之 栈

    栈结构 链式栈 一.栈结构体 1构建空栈 2栈置空 3判断栈空 4获取栈顶 5入栈 6出栈 7便利栈 二.链式栈 ...

  • 栈和队列

    1、栈 栈是一种先进先出的数据结构。栈顶进栈,栈顶出栈。 数据结构 栈的初始化 进栈 出栈 栈的最小值 2、队列 ...

  • 递归累加数组

    入栈 5入栈 4入栈 3入栈 2入栈 1出栈 [1 0]出栈 [2 1 0]出栈 [3 2 1 0]出栈 [4 3...

  • 栈的逻辑结构和存储结构

    main()进栈s(1)进栈s(0)进栈 s(0)出栈s(1)出栈main()出栈 顺序栈 一个数组 + 指向栈顶...

  • 单调栈 2020-06-12(未经允许,禁止转载)

    1.单调栈 指栈内元素保持单调性的栈结构,分为单调增栈(栈底到栈顶元素递增)和单调减栈(栈底到栈顶元素递减) 2....

  • 链栈的操作

    链栈的定义 链栈的操作 初始化 判断栈空 入栈 出栈

  • 函数调用栈平衡

    栈平衡 栈平衡:函数调用前后的栈顶指针指向的位置不变 内平栈 外平栈 内平栈: 指的是在函数调用返回之前使栈保持...

  • 栈的简单Java实现

    栈栈的特点是先进后出,出栈、入栈都是在栈顶操作。

网友评论

      本文标题:03Stack栈

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