[Java]Stack, Queue

dev_lee·2024년 11월 9일
0

Java

목록 보기
2/3
post-thumbnail

Stack (스택)

Stack은 후입선출(LIFO: Last In, First Out) 방식으로 동작한다. 즉, 제일 나중에 들어온 요소가 제일 먼저 나가는 구조이다.

java.util.Stack 클래스를 통해 스택을 사용할 수 있다.

 Stack<Integer> stack = new Stack<>();

주요 메서드

  • push(E item): 스택의 맨 위에 요소를 추가한다.
  • pop(): 스택의 맨 위에 있는 요소를 제거하고 반환한다.
  • peek(): 스택의 맨 위에 있는 요소를 제거하지 않고 반환한다.
  • isEmpty(): 스택이 비어 있는지 확인한다.
  • search(Object o): 특정 요소의 위치를 반환한다. 스택의 맨 위 요소부터 검색하며, 찾은 요소가 맨 위에서 몇 번째에 있는지 1부터 시작하는 인덱스 값으로 반환한다. 만약 스택에 해당 요소가 없다면 -1을 반환한다.
  • size(): 스택에 있는 요소의 개수를 반환한다.
  • contains(Object o): 스택에 특정 요소가 포함되어 있는지 확인한다. 해당 요소가 있으면 true, 없으면 false를 반환한다.
  • clear(): 스택을 초기화한다.
Stack<Integer> stack = new Stack<>();
        
// push() 메서드 : 요소 추가
stack.push(1);
stack.push(2);
stack.push(3);

System.out.println(stack); // [1, 2, 3]

// pop() 메서드 : 스택의 맨 위에 있는 요소를 제거하고 반환
int element = stack.pop();
System.out.println(element); // 3
// 맨 위에 있는 요소를 제거 하고 반환
System.out.println(stack); // [1, 2]

// peek() 메서드 : 스택의 맨 위에 있는 요소를 제거하지 않고 반환
int peek = stack.peek();
System.out.println(peek); // 2
// 요소를 제거하지 않고 맨 위에 있는 요소 반환
System.out.println(stack); // [1, 2]

// isEmpty() 메서드 : 스택이 비어 있는지 확인
System.out.println(stack.isEmpty()); // false

// search() 메서드 : 특정 요소의 위치를 반환
int position = stack.search(1);
System.out.println(position); // 2

// size() 메서드 : 스택의 요소의 개수 반환
int size = stack.size();
System.out.println(size); // 2

// contains() 메서드 : 스택에 특정 요소가 포함되어 있는지 확인
System.out.println(stack.contains(1)); // true

// clear() 메서드 : 스택을 초기화
stack.clear();
System.out.println(stack); // []

// isEmpty() 다시 확인
System.out.println(stack.isEmpty()); // true;

Queue (큐)

Queue는 선입선출(FIFO: First In, First Out) 방식으로 동작한다. 즉, 제일 먼저 들어온 요소가 제일 먼저 나가는 구조이다.

java.util.Queue 인터페이스와 LinkedList 혹은 ArrayDeque 클래스로 구현할 수 있다.

 Queue<Integer> queue = new LinkedList<>();

주요 메서드

  • add(E e): 큐의 끝에 요소를 추가한다. 공간이 부족하면 예외 IllegalStateException을 발생 시킨다.
  • offer(E e): 큐의 끝에 요소를 추가한다. 공간이 부족하면 false를 반환한다.
  • poll(): 큐의 맨 앞에 있는 요소를 제거하고 반환한다. 큐가 비어 있으면 null을 반환한다.
  • remove(): 큐의 맨 앞에 있는 요소를 제거하고 반환한다. 큐가 비어 있으면 예외 NoSuchElementException를 발생 시킨다.
  • peek(): 큐의 맨 앞에 있는 요소를 제거 하지 않고 반환한다. 큐가 비어 있으면 null을 반환한다.
  • isEmpty(): 큐가 비어 있는지 확인한다. 비어있으면 true, 비어있지 않으면 false를 반환한다.
  • size(): 큐에 있는 요소의 개수를 반환한다.
  • contains(Object o): 큐에 특정 요소가 포함되어 있는지 확인한다. 해당 요소가 있으면 true, 없으면 false를 반환한다.
  • clear(): 큐를 초기화한다.
Queue<String> queue = new LinkedList<>();

// add() 메서드: 요소 추가
queue.add("Apple");
queue.add("Banana");
queue.add("Cherry");
System.out.println(queue); // [Apple, Banana, Cherry]

// offer() 메서드: 요소 추가
queue.offer("Date");
System.out.println(queue); // [Apple, Banana, Cherry, Date]

// poll() 메서드: 맨 앞 요소 제거 후 반환
String element = queue.poll();
System.out.println(element); // Apple
System.out.println(queue); // [Banana, Cherry, Date]

// remove() 메서드: 맨 앞 요소 제거 후 반환
String element2 = queue.remove();
System.out.println(element2); // Banana
System.out.println(queue); // [Cherry, Date]

// peek() 메서드: 맨 앞 요소 확인 (제거하지 않음)
String peek = queue.peek();
System.out.println(peek); // Cherry
System.out.println(queue); // [Cherry, Date]

// contains() 메서드: 특정 요소 포함 여부 확인
System.out.println(queue.contains("Cherry")); // true
System.out.println(queue.contains("Grape")); // false

// size() 메서드: 큐의 크기 확인
int size = queue.size();
System.out.println(size); // 2

// isEmpty() 메서드: 큐가 비어 있는지 확인
System.out.println(queue.isEmpty()); // false;

// clear() 메서드: 모든 요소 제거
queue.clear();
System.out.println(queue); // []

// isEmpty() 다시 확인
System.out.println(queue.isEmpty()); // true;

0개의 댓글