# Balanced delimiters
defisValidSource(srcfile):s=Stack()# 스택 객체 생성시 처음 0 데이터가 들어가 있으므로,
s.pop()# pop을 한번 해주고 사용한다.
forlineinsrcfile:fortokeninline:# 참고 : 괄호 아닌건 다 무시(괄호만 체크하는 함수임)
iftokenin"{[(":# 열린 괄호면 push
s.push(token)eliftokenin"}])":# 닫힌 괄호면 균형 여부 확인
ifs.isEmpty():returnFalseelse:left=s.pop()# 균형 여부 확인
if(token=="}"andleft!="{")or \
(token=="]"andleft!="[")or \
(token==")"andleft!="("):returnFalsereturns.isEmpty()# 스택에 괄호 다 삭제 되었다면 True일거고, 균형이 맞다는 의미가 된다.
a='{A + (B * C) - (D / [E + F])}'print(isValidSource(a))# True
Queue(큐)
FIFO (First in, first out)
1. List-based Queue => 리스트 큐(ADT)
생략(아래 다양한 큐나 확인(어차피 List로 구성))
Code of Circular Queue(원형 큐)
고정된 크기의 배열에서 임의의 숫자가 자리를 찾는 방법(공식)
(self.back +1) % maxSize 란 => (현재위치) % 전체크기
# Code of Circular Queue => 원형 큐
classQueueNode(object):def__init__(self,item):self.item=itemself.next=None# 안쓰긴함
classQueue:def__init__(self,maxSize):self.count=0# size
self.front=0# 맨 앞
self.back=maxSize-1# 맨 뒤
self.qArray=[0foriinrange(maxSize)]# 고정 크기 Array(maxSize), 0초기화
defisEmpty(self):returnself.count==0defisFull(self):returnself.count==len(self.qArray)deflen(self):returnself.countdefenqueue(self,item):maxSize=len(self.qArray)self.back=(self.back+1)%maxSize# index공식 (현위치)%전체크기
self.qArray[self.back]=itemself.count+=1defdequeue(self):item=self.qArray[self.front]maxSize=len(self.qArray)self.front=(self.front+1)%maxSizeself.count-=1returnitema=Queue(5)# size 5
a.enqueue(32)a.enqueue(31)a.enqueue(30)a.enqueue(29)a.enqueue(28)a.enqueue(20)a.enqueue(21)print(a.dequeue())# 20(값)
print(a.dequeue())# 21
print(a.qArray)# [20, 21, 30, 29, 28]
print(a.count)# 5(크기)
print(a.front)# 2(index)
Priority Queue(우선순위 큐) - Unbounded
Unbounded는 무한 즉, 한정되어 있지 않다라는 의미. dequeue하면서 우선순위로 추출
Bounded는 우선순위 고정되어 있다는 의미. (보통 리스트 - 연결리스트 이렇게 2중 구조로 형성)
댓글남기기