[선형 자료구조] 데크 (Deque)

헛헛한꿔녀니·2023년 11월 19일

자료구조

목록 보기
6/9

💡 데크 (Deque)

👉 양쪽에서 삽입과 삭제가 모두 가능한 자료구조

  • Deque : Doubly - ended Queue
  • Stack과 Queue를 합친 형태

💡 데크 기본 구조

👉 데크의 기본 구조는 양방향에서 삽입과 삭제가 가능한 구조

👉 일부 기능을 제한하여 용도에 맞게 변형이 가능하다.

  • add, remove 는 예외를 발생시켜 예외 처리를 하고, offer, poll의 경우는 null 이나 false 를 반환한다.

👉 입력제한 데크 (Scroll)

  • 한 쪽의 입력을 제한한 데크 (Front, Rear 중 한 쪽)

👉 출력제한 데크 (Scroll)

  • 한 쪽의 출력을 제한한 데크 (Front, Rear 중 한 쪽)

📖 팰린드롬 (Palindrome) 판별하기 예제

import java.util.ArrayDeque;
import java.util.Deque;

public class Practice2 {
    public static boolean checkPalindrome(String str) {
        Deque deque = new ArrayDeque();
        boolean isPalindrome = true;

        for(String s : str.split("")){
            deque.addFirst(s);
        }

        while (!deque.isEmpty()) {  // 데크가 빌때까지 루프
            String s1 = (String)deque.pollFirst();  // remove를 사용하면 비어있을 때 예외발생하지만
            String s2 = (String)deque.pollLast();   // poll 을 사용하여 null 이 저장되는걸 활용한다.

            if(s1 != null && s2 != null && !s1.equals(s2)){     // 팰린드롬이 아닌 경우
                isPalindrome = false;
                break;
            }
        }

        return isPalindrome;
    }

    public static void main(String[] args) {
        System.out.println(checkPalindrome("a"));       // true
        System.out.println(checkPalindrome("aba"));     // true
        System.out.println(checkPalindrome("abba"));    // true
        System.out.println(checkPalindrome("abab"));    // false
        System.out.println(checkPalindrome("abcba"));   // true
        System.out.println(checkPalindrome("abccba"));  // true
        System.out.println(checkPalindrome("madam"));  // true
    }
}

0개의 댓글