[データ構造]Stack


stack


0 x 00定義と性質
0 x 01機能と実装
0 x 02練習問題
0 x 03完了後

0 x 00定義と性質


スタックは、エレメントを一端から挿入または削除するだけのデータ構造です.プリングルストンかエレベーターだと思います.
構造的に先に入る要素は最後に現れ、これは私たちが「FILO」(First In Last Out)データ構造と呼ぶことを意味します.
キューまたはインデックスにも制限があります.たとえば、特定の場所でのみ要素を挿入または削除できます.だからStack,Queue,Dequeueを組み合わせて厳格な構造と呼ぶ.

スタックの性質

  • 元素の付加値O(1)
  • 元素の除去量はO(1)
  • である.
  • 第1頂部元素確認O(1)
  • 原則として残りの要素を確認または変更することはできません

    0 x 01機能と実装

    # stack 클래스를 생성하고 init method를 이용하여 멤버 변수를 만들어준다.
    # top 변수 안에는 파이썬에 내장되어 있는 list를 이용하여 스택을 만들어 준다.
    
    class Stack:
        def __init__(self):
            self.top=[]
    
    #__len__ 과 __str__를 작성한다
    
        #stack의 크기를 출력
        def __len__(self):
            return len(self.top)
    
        #stack 내부 자료를 string으로 변환하여 반환
        def __str__(self):
            return str(self.top[::1])
    
    #구현 함수
    
        #Push
        def push(self, item):
            self.top.append(item)
        
        #Pop
        def pop(self):
            #if Stack is not empty
            if not self.isEmpty():
                #pop and return
                #-1을 파라미터로 넘겨서 리스트의 마지막 값을 반환
                return self.top.pop(-1)
            else:
                print("Stack underflow")
                exit()
    
        #isContain
        def isContain(self,item):
            return item in self.top
    
        #Peek
        def peek(self):
            if not self.isEmpty():
                return self.top[-1]
            else:
                print("underflow")
                exit()
    
        #isEmpty:
        def isEmpty(self):
            return len(self.top)==0
    
        #Size
        def size(self):
            return len(self.top)
    

    0 x 02練習問題


    BOJ 10828:スタックhttps://www.acmicpc.net/problem/10828


    import sys
    n = int(sys.stdin.readline())
    
    stack=[]
    for i in range(n):
        command = sys.stdin.readline().split()
    
        if command[0]=='push':
            stack.append(command[1])
        elif command[0]=='pop':
            if len(stack)==0:
                print(-1)
            else:
                print(stack.pop())
        elif command[0] == 'size':
            print(len(stack))
        elif command[0] == 'empty':
            if len(stack)==0:
                print(1)
            else:
                print(0)
        elif command[0] == 'top':
            if len(stack)==0:
                print(-1)
            else:
                print(stack[-1])

    0 x 03完了後


    スタックは、正式に使用できる多くの方法を持つ資料構造です.代表的な例としては、括弧対、前列/中列/後列表記法、DFS、Flood Fillなどがある.これらの内容は一般的に言及されるが,成分が多くなるため,個々の内容を独立して処理する.