Sök…


Introduktion

En bunt är en behållare med föremål som sätts in och tas bort enligt principen för först in-ut (LIFO). I nedstängningsstackarna är det bara två operationer som är tillåtna: tryck objektet in i bunten och släpp objektet ur bunten . En stack är en databasstruktur med begränsad åtkomst - element kan läggas till och tas bort från stacken endast upptill . Här är en strukturell definition av en bunt: en bunt är antingen tom eller så består den av en topp och resten som är en bunt.

Syntax

  • stack = [] # Skapa stacken
  • stack.append (object) # Lägg till objekt längst upp i bunten
  • stack.pop () -> object # Återgå det bästa objektet från stacken och ta bort det också
  • lista [-1] -> objekt # Titta på det bästa objektet utan att ta bort det

Anmärkningar

Från Wikipedia :

Inom datavetenskap är en stack en abstrakt datatyp som fungerar som en samling element, med två huvudoperationer: push , som lägger till ett element i samlingen, och pop , som tar bort det senast tillagda elementet som ännu inte togs bort.

På grund av hur deras element nås är staplar även kända som Last-In, First-Out ( LIFO ) -stackar .

I Python kan man använda listor som staplar med append() som push och pop() som pop-operationer. Båda operationerna körs i konstant tid O (1).

Pythons deque kan också användas som en stack. Jämfört med listor deque push- och pop-operationer med konstant tidskomplexitet från båda ändarna.

Skapa en stackklass med ett listobjekt

Med hjälp av en list objekt kan du skapa en fullt fungerande generisk stack med hjälpare metoder som kikar och kontrollera om stacken är tom. Kolla in de officiella Python-dokumenten för att använda list som Stack här .

#define a stack class
class Stack:
    def __init__(self):
        self.items = []
    
    #method to check the stack is empty or not
    def isEmpty(self):
        return self.items == []
    
    #method for pushing an item 
    def push(self, item):
        self.items.append(item)

    #method for popping an item 
    def pop(self):
        return self.items.pop()
    
    #check what item is on top of the stack without removing it
    def peek(self):
        return self.items[-1]

    #method to get the size
    def size(self):
        return len(self.items)

    #to view the entire stack
    def fullStack(self):
        return self.items

Ett exempel kör:

stack = Stack()
print('Current stack:', stack.fullStack())
print('Stack empty?:', stack.isEmpty())
print('Pushing integer 1')
stack.push(1)
print('Pushing string "Told you, I am generic stack!"')
stack.push('Told you, I am generic stack!')
print('Pushing integer 3')
stack.push(3)
print('Current stack:', stack.fullStack())
print('Popped item:', stack.pop())
print('Current stack:', stack.fullStack())
print('Stack empty?:', stack.isEmpty())

Produktion:

Current stack: []
Stack empty?: True
Pushing integer 1
Pushing string "Told you, I am generic stack!"
Pushing integer 3
Current stack: [1, 'Told you, I am generic stack!', 3]
Popped item: 3
Current stack: [1, 'Told you, I am generic stack!']
Stack empty?: False

Parsing Parentheses

Buntar används ofta för att analysera. En enkel tolkningsuppgift är att kontrollera om en sträng parentes matchar.

Till exempel är strängen ([]) matchande eftersom de yttre och inre parenteserna bildar par. ()<>) matchar inte, eftersom den sista ) har ingen partner. ([)] är inte heller matchande, eftersom par måste vara antingen helt inuti eller utanför andra par.

def checkParenth(str):
    stack = Stack()
    pushChars, popChars = "<({[", ">)}]"
    for c in str:
        if c in pushChars:
            stack.push(c)
        elif c in popChars:
            if stack.isEmpty():
                return False
            else:
                stackTop = stack.pop()
                # Checks to see whether the opening bracket matches the closing one
                balancingBracket = pushChars[popChars.index(c)]
                if stackTop != balancingBracket:
                    return False
        else:
            return False

    return not stack.isEmpty()


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow