[データ構造]Stack
12894 ワード
stack
0 x 00定義と性質
0 x 01機能と実装
0 x 02練習問題
0 x 03完了後
0 x 00定義と性質
スタックは、エレメントを一端から挿入または削除するだけのデータ構造です.プリングルストンかエレベーターだと思います.
構造的に先に入る要素は最後に現れ、これは私たちが「FILO」(First In Last Out)データ構造と呼ぶことを意味します.
キューまたはインデックスにも制限があります.たとえば、特定の場所でのみ要素を挿入または削除できます.だからStack,Queue,Dequeueを組み合わせて厳格な構造と呼ぶ.
スタックの性質
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などがある.これらの内容は一般的に言及されるが,成分が多くなるため,個々の内容を独立して処理する.
Reference
この問題について([データ構造]Stack), 我々は、より多くの情報をここで見つけました https://velog.io/@kanamycine/자료구조-Stackテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol