Java

[Java/자바]큐(Queue),스택(Stack)

둥구는 지굴다 2022. 10. 13. 20:32

안녕하세요 오늘은 자바의 컬렉션 프레임워크에서 사용되는 FIFO(First In First Out) 자료구조를 제공하는 Queue인터페이스와 LIFO(Last In First Out) 자료구조를 제공하는 Stack클래스를 알아보겠습니다.

큐(Queue)란?

큐는 자바의 컬렉션 프레임워크에서 사용되는 FIFO(선입선출) 자료구조를 제공하는 인터페이스이며,

FIFO 자료구조에 사용되는 메서드를 정의하고 있습니다.

FIFO(First In First Out)이란?

FIFO는 선입선출을 의미합니다. 먼저 넣은 객체가 먼저 빠져나가는 자료구조를 말합니다.

위의 사진처럼 통로가 두개입니다. 통로 중 한쪽 끝은 front라 부르며 삭제 연산만 합니다. 먼저 들어온 데이터니 삭제가 되겠죠? 그 반대의 통로는 rear라고 부릅니다 제일 마지막으로 들어온 값을 가리키겠죠 따라서 삽입 연산만 하게 됩니다.

데이터를 넣을 때는 push( )라는 메서드를 데이터를 삭제할 때는 poll( )이라는 메서드를 사용합니다. 아래는 큐에서 사용되는 다양한 메서드입니다.

큐와 관련된 메서드

메서드 설명
boolean add(E e) Queue에 요소 e 추가
E element( ) Queue의 제일 상단 요소 반환
E remove( ) Queue의 최상단 요소를 반환 후 제거
boolean offer(E e) Queue에 요소 e를 추가
E peek( ) Queue의 제일 상단 요소 반환
E poll( ) Quueue의 최상단 요소를 반환 후 제거
 ⚠️ Queue는 인터페이스 이므로, 사용하려면 업 캐스팅이 필요!

큐를 사용하는 방법

아래에는 Array까지 있지만 큐를 대표하는 클래스는 LinkedList입니다. 다라서 LinkedList객체를 사용하여 업 캐스팅 한 예시를 보여드리겠습니다.

Queue<Element> q = new LinkedList<Element> ( );
Queue<Element> q = new Array<Element>( );

큐(Queue)에서 사용되는 메서드 사용해보기

1. 큐를 사용하여 LinkedList객체 생성 및 데이터 삽입 메서드 add( )

Queue<String> q= new LinkedList<String>();
		//add(e): rear위치 즉, 맨뒤의 위치에 e를 삽입
		q.add("apple");
		q.add("banana");
		q.add("grape");
		q.add("potato");
		
		System.out.println(q); //넣은 순서대로 출력

4개의 데이터를 삽입했습니다.

2.E.element( )

// E element() :최상단의 요소 즉, flont에 위치한 데이터를 반환함
		System.out.println("element:"+q.element());

3.reomve( ) 

// reomve(): front에 위치한 데이터를 반환한 뒤 삭제해줍니다.
		q.remove();
		System.out.println("remove:"+q.remove());

4.offer(e)

//offer(e):rear위치에 데이터를 삽입합니다.
		q.offer("peach");
		System.out.println(q);

 peach가 삽입되어 있는 것을 확인할 수 있습니다.

5.peak( )

//peek(): from 위치에 있는 데이터의 값만 반환
		System.out.println("peek:"+q.peek());
		System.out.println(q); //삭제되지는 않음

6.poll( )

//poll() :remove( )와 마찬가지로 front에 위치한 데이터를 반환 후 삭제
		System.out.println("poll:"+q.poll());
		System.out.println(q);


스택(Stack)이란?

스택은 큐와는 다르게 클래스 입니다. 

스택 클래스는 LIFO(Last In First Out) 즉, 후입 선출 나중에 들어온 데이터가 먼저 나갑니다.

위의 그림은 후입선출을 그림으로 표현해 봤습니다. 선입선출과는 다르게 통로가 하나밖에 없기 때문에

첫 번째 들어간 데이터는 가장 나중에 나오게 됩니다. 가장 아래의 데이터를 bottom이라 부르며

가장 최근에 들어온 즉, 최상단에 존재하는 데이터는 top이라고 지칭합니다.

데이터를 삽입할 때는 push( )라는 메서드를 삭제할 때는 pop( )이라는 메서드를 사용합니다.

Stack에서 사용되는 메서드

메서드 설명
E peek( ) top 요소를 반환
E pop( ) top 요소 제거 후 반환
E push(E item) top에 요소 추가
int search(ObjectO) 요소 0이 있는지 검색해서 위치 반환

Stack에서 사용되는 메서드 사용해보기

Stack객체 생성 및 데이터 삽입

1.push( )

Stack<String> s = new Stack<String>(); //String타입 명시
		//push( ):데이터 삽입
		s.push("apple");
		s.push("banana");
		s.push("cherry");
		System.out.println(s);

2.pop( )

//pop( ):top의 데이터 삭제
		System.out.println("pop( ):"+s.pop()); //후입 선출이기 때문에 제일 마지막에 넣은 값인
									//cherry가 삭제
		System.out.println(s);

3.peek( )

//peek( ):top의 데이터 보기
		System.out.println("peek():"+s.peek());

4.search( )

//search():원하는 데이터의 위치를 반환함
		System.out.println("search(apple):"+s.search("apple"));
		System.out.println("search(banana):"+s.search("banana"));


자 이상으로 오늘은 FIFO, LIFO, Queue.Stack에 대해 알아보았습니다.

글 읽어주셔서 감사합니다.!!