WY J
학습 공간
WY J
  • 분류 전체보기 (95)
    • Java (38)
      • 알고리즘 (5)
      • 자료구조 (4)
      • 기초 (9)
      • OOP (10)
      • Collection (3)
      • Effective (5)
      • reator (2)
    • HTML&CSS (5)
    • macOS (3)
    • Git (5)
    • Network (5)
    • MySQL (2)
    • Spring Boot (31)
      • Core (5)
      • MVC (15)
      • Security (10)
    • 알고리즘 (1)
    • Cloud (3)
      • AWS (3)
    • Docker (1)
    • Project (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

hELLO · Designed By 정상우.
WY J

학습 공간

Java/자료구조

[Java DataStructure] Stack&Queue

2022. 7. 26. 14:41

자료구조란?

  • 데이터를 체계적으로 저장하여 데이터를 활용을 유리하게 한다.
  • 무수한 상황에서 데이터를 효율적으로 다룰 수 있는 방법을 모두 모아, 자료구조라는 이름을 붙였다.
  • 특정한 상황에 놓인 문제를 해결하는 데에 특화되어 있고, 적합한 자료구조를 적용하여 빠르고 정확하게  문제를 해결할 수 있다.

Stack

  • 데이터(data)를 순서대로 쌓고, 하나씩 넣고 뺄 수 있으며, 입출력 방향이 하나로 같다.
  • Stack 자료구조의 정책을 LIFO(Last In First Out) 혹은 FILO(First In Last Out)이라고 부르기도 한다.
  • Stack에 데이터를 넣는 것을 'PUSH', 데이터를 꺼내는 것을 'POP'이라고 한다.
  • 실사용의 예시로, 브라우저의 뒤로가기, 앞으로가기 기능을 구현할 때 사용한다.

 

LIFO(Last In First Out)

예1) 1, 2, 3, 4를 스택에 차례대로 넣습니다.

Stack<Integer> stack = new Stack<>(); //Integer형 스택 선언

stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
---------------------------
1 <- 2 <- 3 <- 4
---------------------------
들어간 순서대로, 1번이 제일 먼저 들어가고 4번이 마지막으로 들어가게 됩니다.

예2) 스택이 빌 때까지 데이터를 전부 빼냅니다.

stack.pop();
stack.pop();
stack.pop();
stack.pop();
---------------------------

---------------------------
4, 3, 2, 1
제일 마지막에 있는 데이터부터 차례대로 나오게 됩니다.

 

 ArrayList로 Stack 구현

public class Solution { 
  private ArrayList<Integer> listStack = new ArrayList<Integer>();

  public void push(Integer data) {
    listStack.add(data); // 배열의 add로 구현
  }
  // 스택에서 데이터 꺼내기
  public Integer pop() {
     if(listStack.size() == 0) {
      return null;
    }else {
      return listStack.remove(listStack.size() - 1);
    }
  }
  // 스택에 쌓인 데이터 크기 리턴
  public int size() {
     return listStack.size();
  }
  // 가장 나중에 추가된 데이터 리턴
  public Integer peek() {
     if(listStack.size() == 0) {
      return null;
    }else {
      return listStack.get(listStack.size() - 1);
    }
  }
  // 스택에 포함되어 있는 데이터를 문자열로 변환
  public String show() {
    return listStack.toString();
  }
  public void clear() { listStack.clear(); }
}

Queue

  • Queue는 Stack과 반대되는 개념으로 데이터를 입력된 순서대로 처리할 때 주로 사용한다.
  • 먼저 들어간 데이터가 먼저 나오는 FIFO(First In First Out) 혹은 LILO(Last In Last Out) 을 특징을 가지고 있다.
  • 데이터를 넣는 것을 'enqueue', 데이터를 꺼내는 것을 'dequeue'라고 한다.
  • 실사용을 예시로, 프린터는 인쇄 작업 Queue에 들어온 문서를 순서대로 인쇄한다.

 

FIFO(First In First Out)

예1) 1, 2, 3, 4를 큐에 차례대로 넣습니다.

Queue<Integer> queue = new LinkedList<>(); //int형 queue 선언

queue.add(1);     // queue에 값 1 추가
queue.add(2);     // queue에 값 2 추가
queue.add(3);     // queue에 값 3 추가
queue.add(4);     // queue에 값 4 추가

						   queue.add(데이터)
출력 방향 <---------------------------< 입력 방향
				     1 <- 2 <- 3 <- 4
				<---------------------------<
들어간 순서대로, 1번이 제일 먼저 들어가고 4번이 마지막으로 들어가게 됩니다.

예2) 큐가 빌 때까지 데이터를 전부 빼냅니다.

queue.poll();       // queue에 첫번째 값을 반환하고 제거
queue.poll();
queue.poll();
queue.poll();

						   queue.poll()
출력 방향 <---------------------------< 입력 방향

				<---------------------------<
1, 2, 3, 4
제일 첫 번째 있는 데이터부터 차례대로 나오게 됩니다.

 

ArrayList로 Queue 구현

public class Solution { 
	private ArrayList<Integer> listQueue = new ArrayList<Integer>();

  public void add(Integer data) {
    listQueue.add(data);
  }
  // 첫번째로 추가된 데이터를 삭제 후 리턴
  public Integer poll() {
    if(listQueue.size() == 0) {
      return null;
    }else {
    return listQueue.remove(0);
    }
  }
  // 큐에 추가된 데이터의 크기를 리턴
  public int size() {
    return listQueue.size();
  }
  // 첫번째로 추가된 데이터를 리턴
  public Integer peek() {
    if(listQueue.size() == 0) {
      return null;
    }else {
      return listQueue.get(0);
    }
  }
  // 큐에 들어있는 모든 데이터를 String타입으로 변환 후 리턴
  public String show() {
    return listQueue.toString();
  }

  public void clear() { 
		listQueue.clear(); 
	}
}

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

[Java DataStructure] Priority Queue(우선순위 큐)란?  (0) 2023.01.17
[Java DataStructure] Graph  (0) 2022.08.01
[Java DataStructure] Tree  (0) 2022.07.28
    'Java/자료구조' 카테고리의 다른 글
    • [Java DataStructure] Priority Queue(우선순위 큐)란?
    • [Java DataStructure] Graph
    • [Java DataStructure] Tree
    WY J
    WY J

    티스토리툴바