기록방

데큐 (Deque) 본문

CS/자료구조

데큐 (Deque)

Soom_1n 2021. 5. 4. 17:50

 

데큐 : 스택과 큐가 합쳐진 형태로 앞 뒤 모두 입력과 출력이 가능하다.

 

[ 기능 ]

  • insertFront/Rear : 데큐 앞/뒤 데이터를 넣음
  • deleteFront/Rear : 데큐 앞/뒤 데이터를 꺼냄
  • peekFront/Rear : 데큐의 앞/뒤 데이터를 알림(엿봄)
  • indexOf : 데큐에 특정 값이 있는지, 있다면 어느 위치에 있는지 알림
  • size : 데큐의 데이터 수 확인
  • clear : 데큐 비우기
  • isEmpty : 데큐가 비었는지 확인
  • isFull : 데큐가 가득 찼는지 확인
  • dump : 데큐의 모든 데이터 확인

[ python ]

 

class Deque:
    def __init__(self):
        print('\n-- 데큐 프로그램 --')
        self.dq = []
        self.max = 10

    def insertFront(self, num):
        if len(self.dq) < self.max:
            self.dq.insert(0, num)
            print('insertFront :', num)
        else:
            print('오류 : 데큐가 가득 찼습니다.')

    def insertRear(self, num):
        if len(self.dq) < self.max:
            self.dq.append(num)
            print('insertRear :', num)
        else:
            print('오류 : 데큐가 가득 찼습니다.')

    def deleteFront(self):
        if self.dq:
            temp = self.dq[0]
            self.dq = self.dq[1:]
            print('deleteFront :',temp)
        else:
            print('오류 : 데큐가 비었습니다.')
    def deleteRear(self):
        if self.dq:
            temp = self.dq.pop()
            print('deleteRear :',temp)
        else:
            print('오류 : 데큐가 비었습니다.')
    def peekFront(self):
        if self.dq:
            print('peek :',self.dq[0])
        else:
            print('오류 : 데큐가 비었습니다.')
    def peekRear(self):
        if self.dq:
            print('peek :',self.dq[-1])
        else:
            print('오류 : 데큐가 비었습니다.')

    def indexOf(self, num):
        if num in self.st:
            print('\'{0}\'의 위치는 {1}번 인덱스입니다.'.format(num,self.dq.index(num)))
        else:
            print('데큐 안에 \'{0}\' 없습니다.'.format(num))

    def clear(self):
        self.dq = []
        print('데큐가 초기화 되었습니다.')

    def size(self):
        print('데큐의 크기는 {0} 입니다.'.format(len(self.dq)))

    def isEmpty(self):
        if self.dq:
            print('데큐가 비어있지 않습니다.')
        else:
            print('데큐가 비어있습니다.')

    def isFull(self):
        if len(self.dq) < self.max:
            print('데큐가 가득차지 않았습니다.')
        else:
            print('데큐가 가득 찼습니다.')

    def dump(self):
        print('deque :',self.dq)


dq = Deque()
op = 1
num = 0

while op != 0:
    print('\n[menu]')
    print('1)insertFront 2)insertRear 3)deleteFront 4)deleteRear 5)peekFront 6)peekRear')
    print('7)indexOf 8)clear 9)size 10)isEmpty 11)isFull 12)dump 0)exit')
    print('op : ',end='')
    op = int(input())
    print('')

    if op == 1:
        num = int(input('num : '))
        dq.insertFront(num)
    elif op == 2:
        num = int(input('num : '))
        dq.insertRear(num)
    elif op == 3:
        dq.deleteFront()
    elif op == 4:
        dq.deleteRear()
    elif op == 5:
        dq.peekFront()
    elif op == 6:
        dq.peekRear()
    elif op == 7:
        num = int(input('num : '))
        dq.indexOf(num)
    elif op == 8:
        dq.clear()
    elif op == 9:
        dq.size()
    elif op == 10:
        dq.isEmpty()
    elif op == 11:
        dq.isFull()
    elif op == 12:
        dq.dump()
    elif op != 0:
        print('잘못 입력하셨습니다.')

print('종료합니다.')
728x90

'CS > 자료구조' 카테고리의 다른 글

트라이(Trie) 자료구조  (0) 2024.05.19
큐 (Queue)  (0) 2021.05.04
스택 (Stack)  (0) 2021.05.04