본문 바로가기

스파르타 기술면접

Stack과 Queue 그리고 Array와 Linked List 자료구조

Stack

💡 후입선출(LIFO, Last-In-First-Out) 방식으로 데이터를 저장하는 자료구조
  • 가장 마지막에 추가된 항목이 가장 먼저 제거됩니다. Stack은 push() 메서드를 사용하여 항목을 추가하고, pop() 메서드를 사용하여 가장 최근에 추가된 항목을 제거합니다. 예를 들어, 함수 호출 스택은 Stack을 이용하여 구현됩니다.
  • 웹브라우저 방문한 주소를 스택에 저장해 두고 앞으로가기/ 뒤로가기 버튼, 괄호 짝 맞추기
import java.util.Stack;

public class StackExample {
    public static void main(String[] args) {
        Stack<String> stack = new Stack<>();

        // 스택에 데이터 추가
        stack.push("A");
        stack.push("B");
        stack.push("C");

        // 스택에서 데이터 꺼내기
        System.out.println(stack.pop()); // C
        System.out.println(stack.pop()); // B
        System.out.println(stack.pop()); // A
    }
}

 

Queue

 💡 선입선출(FIFO, First-In-First-Out) 방식으로 데이터를 저장하는 자료구조입니다.
  • 가장 먼저 추가된 항목이 가장 먼저 제거됩니다. Queue는 enqueue() 메서드를 사용하여 항목을 추가하고, dequeue() 메서드를 사용하여 가장 오래된 항목을 제거합니다. 예를 들어, 메시지 큐는 Queue를 이용하여 구현됩니다.
  • 캐시에서 데이터를 삭제할 때 오래된 데이터를 먼저 삭제, 대기열에서 대기 순으로 처리되는 점
  • 사용하는 방법?? 선착순을 만드는 방법…

 

Array

💡 데이터를 인덱스를 통해 접근하는 방식의 자료구조입니다.
  • 배열은 연속된 메모리 공간에 데이터를 저장, 인덱스를 사용하여 데이터에 빠르게 접근할 수 있다.
  • 동적 변경이 어렵다(크기가 고정되어있다.)
  • 배열의 크기는 초기화할 때 지정되며, 이후에 변경할 수 없다. 배열은 인덱스를 사용하여 임의의 위치에 있는 데이터에 빠르게 접근할 수 있기 때문에, 검색이나 정렬 등에 적합합니다.
  • 삽입, 삭제와 같은 동적인 연산에는 불리 → 링크드리스트

 

Linked List

💡 데이터와 다음 노드의 주소를 함께 저장하는 방식의 자료구조입니다.
  • 각 노드는 데이터와 다음 노드의 주소를 가리키는 포인터로 구성되며, 이전 노드의 주소를 가리키는 포인터도 가질 수 있습니다.
  • 인덱스를 통해 접근이 어렵기 때문에 처음부터 순서대로 찾아가야 함.
  • Linked List는 데이터의 추가, 삭제가 빠르며, 크기를 동적으로 조절할 수 있습니다.
  • 하지만 인덱스를 사용하여 데이터에 접근하는 것이 불가능하므로, 검색이나 정렬에는 적합하지 않습니다.

 


-arraylist와 linkedList의 차이?

-스택, 큐가 사용되는 곳? 사용법?(디큐같은...)