/ ALGORITHM

Algorithm Stack and Queue에 관하여

오늘은 스택과 큐라는 알고리즘을 알아보도록 하겠다. 스택과 큐를 같이 묶어서 포스팅하는 이유는 비슷한 느낌이자만 차이가 분명하게 존재하기 때문이다.

스택(Stack)이란?

스택은 Last In First Out (LIFO), 즉 후입선출구조를 가지고 있다. 또한, 한쪽에서 삽입과 삭제가 이루어 지는 구조이기도 하다. ex_screenshot 위의 사진은 흔히 볼 수 있는 스택의 형태를 가지고 있고, push는 자료의 삽입, pop은 자료의 배출이라고 보면 된다. 사진에서도 볼 수 있듯 한쪽에서 삽입되고, 한 쪽에서 삭제가 되는 것을 볼 수가 있다.

그럼 스택은 어디서 쓰일까? 예를 들자면, 브라우저의 뒤로가기 버튼을 생각하면된다. 가장 마지막에 거쳐온 곳을 보여줘야하니 제일 마지막의 정보를 제일 처음 보여준다와 의미가 통한다.

큐(Queue)란?

큐는 스택과 다르게 First In First Out(FIFO) 즉, 선입선출구조를 가지고 있다. 스택은 한쪽에서 삽입과 삭제가 일어난다고 했는데, 그렇다면 큐는? 큐는 제일 먼저들어간 것이 제일 처음 나오게 되므로, 삽입되는 곳에서는 이미 마지막으로 들어온 것이 버티고 있어 나가지 못한다. 그렇기 때문에 한쪽 끝(front)에서 삽입되어 다른 쪽 끝(rear)에서 삭제된다. ex_screenshot 사진으로 보아도 스택과는 다르게 push되는 곳과 pop되는 곳의 위치가 다른 것을 확인할 수 있다.

그럼 큐는 어디서 쓰일까? 예를 들자면, 대기줄이 필요할때 먼저온 사람이 먼저 정보를 받는 형태 또는 데이터 유입속도가 데이터 소모속도 보다 빠를때 쓰일 수 있다.

Java에서 Stack 사용법

Stack 선언

import java.util.Stack;
Stack stack = new Stack<elelment>();//element는 스택에 담기는 자료형이 어떤 자료형인지

Stack 값 삽입

stack.push();

Stack 값 삭제

stack.pop();//제일 마지막에 들어간 수 출력과 삭제
stack.clear();//스택에 저장되어 있는 전체 값 삭제

Stack 처음 나올 값 확인

stack.peek();//값만 출력 삭제x

Stack의 기타 메소드

stack.size();//스택의 크기 출력(ex.값이 2개들어 있다면 2를 출력)
stack.empty();//스택이 비어 있는지 체크
stack.contains();//스택에 해당 값이 있는지 체크(boolean으로 리턴)

Java에서 Queue 사용법

Queue 선언

import java.util.LinkedList;
import java.util.Queue;
Queue queue = new LinkedList<elelment>();//element는 큐에 담기는 자료형이 어떤 자료형인지

자바에서 큐는 LinkedList로 객체선언을 해주어야 사용이 가능함을 잊지말자. Queue 값 삽입

queue.offer();//삽입에 성공하면 true를 반환하고, 큐에 여유 공간이 없어 삽입에 실패하면 IllegalStateException을 발생

Queue 값 삭제

queue.poll();//제일 마지막에 들어간 수 출력과 삭제(비어있다면 null)
queue.remove();//큐에 첫번째 값 제거
queue.clear();//큐 초기화

Queue 처음 나올 값 확인

queue.peek();//값만 출력 삭제x