자료구조란 주기억장치에 데이터를 저장하는 방식을 구조적으로 정의하는 것을 말하고, 알고리즘은 문제를 해결하는 방식을 말한다.
이때 자료구조인 데이터를 저장하는 방식에 특별한 문제를 해결하기 위하여 문제 해결의 절차, 즉 알고리즘을 포함한 자료구조가 존재
기본 자료구조에 문제 해결을 위한 특정한 규칙을 포함시킨 자료구조로써 확장형 자료구조라 정의하였음
스택, 큐, 트리, 그래프를 포함시켜 설명함
스택과 큐는 선형 자료구조에 속해 데이터가 저장될 때 순서를 가지고 저장되는 구조를 가지므로, 순서에 맞추어 데이터에 접근하고 수정, 삭제할 수 있다
스택과 큐는 알고리즘을 포함한 자료구조라 정의할 수 있음
괄호 확인 문제
프로그래밍할 때 열린 괄호의 수와 닫힌 괄호의 수가 다르면 프로그램 오류가 발생한다. 이때 오류 발생 프로그램은 괄호 확인 문제를 해결한 프로그램print("계산결과는 {0}입니다.".format((int(a)+int(b))))
a = input()
cnt = 0
for i in a:
if i == "(":
cnt += 1
elif i == ")":
cnt -= 1
if cnt == 0:
print("ok")
else:
print("error")
cnt = []
def push(push_data):
cnt.append(int(push_data))
def pop():
cnt.remove(cnt[-1])
a = input()
for i in a:
if i == "(":
push(i)
elif i == ")":
pop(i)
if len(cnt) == 0:
print("ok")
else:
print("error")
우선순위 연산(후위 표기법 사용)
A*B-C/D 연산 -> ((AB)*(CD)/) -> AB*CD/-
stack = []
def push(push_data):
stack.append(int(push_data))
def pop():
a = 0
a = stack[-1]
stack.remove(stack[-1])
return a
a = list(input().split(","))
for i in a:
if i == "+" or i == "-" or i == "*" or i == "/":
pop_data = pop()
pop_data2 = pop()
if i == "+":
push(pop_data2 + pop_data) # 스택이기에 순서 필수
elif i == "-":
push(pop_data2 - pop_data)
elif i == "*":
push(pop_data2 * pop_data)
elif i == "/":
push(pop_data2 / pop_data)
else:
push(i)
print(pop())
큐(Queue)는 기본 자료구조에 규칙을 포함한 확장형 자료구조
규칙은 데이터를 저장하는 규칙을 말한다
큐의 규칙은 매우 간단
큐를 데이터가 들어가고 나오는 출구가 다른 자료구조라고 하기도하고, 가장 빨리 저장된 데이터를 가장 빨리 불러올 수 있는 의미로 FIFO(Fisrt In First Out) 구조라고 함
큐는 기본 자료구조에 규칙을 포함시킨 자료구조, 실질적으로 주기억장치에 데이터가 저장되는 구조는 기본 자료구조인 배열이나 연결 리스트로 저장됨
큐도 배열 자료규조를 이용하여 구현할 수 있고, 연결 리스트 자료구조를 이용하여 구현할 수 있다.
w_no = 100
queue = []
def enqueue(data):
queue.append(data)
def dequeue(data):
deq_ob = None
if len(queue) ==0:
print("queue is empty")
else:
deq_ob = queue[0]
queue.remove(queue[0])
return deq_ob
while True:
a = int(input("1 : 뽑기, 2: 업무처리, 3:종료"))
if a == 1:
enqueue(w_no):
w_no += 1
print(w_no)
elif a == 2:
b == dequeue()
print(b)
else:
break
좋은 글 감사합니다.