자료 구조 중에 스택과 큐에 대해서 TestCode를 작성해 봅니다.

Stack

  • LIFO(Last Input Firs Out) 마지막에 넣은 요소가 먼저 나온다는 의미이다.
  • DFS 사용

Queue

  • FIFO(Fisrt Input Firs Out) 먼저 들어간 데이터가 먼저 나오는 구조이다.
  • BFS 사용

Stack Source Code

package datatype;
import java.util.Stack;

public class StackTest {

	public static void main(String[] args) {
		
		Stack stack = new Stack();
		System.out.println("==================");
		System.out.println("stack.size():"+stack.size());
		
		stack.push("1");
		stack.push("2");
		stack.push("3");
		stack.push("4");
		stack.push("5");

		System.out.println("stack.peek():"+stack.peek()); // peek 마지막값을 확인하는 것
		
		//stack.remove(0);
		stack.add(0,"*****");//중간에 넣기
		
		
		//while(!stack.empty()){
		//	System.out.println("get : "+stack.peek());//제거하지 않고 마지막 값을 가져오므로 무한루프에 빠진다.
		//}

		System.out.println("==================");
		for(int i=0;i<stack.size();i++){
			System.out.println(i+" : "+stack.get(i).toString()); // 제거없이 조회만
		}
		
		System.out.println("stack.size():"+stack.size());
		System.out.println("==================");

		while(!stack.empty()){
			System.out.println("get : "+stack.pop()); // 입력 역순으로 제거하면 조회됨
		}
	}

}

//출력
==================
stack.size():0
stack.peek():5
==================
0 : *****
1 : 1
2 : 2
3 : 3
4 : 4
5 : 5
stack.size():6
==================
get : 5
get : 4
get : 3
get : 2
get : 1
get : *****

Queue Source Code

package datatype;
import java.util.ArrayList;
import java.util.LinkedList;

public class QueueTest {

	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// add() 자료 입력
		// remove() 출력
		// peek() 출력할 첫번째 데이터 읽기(제거는 아님)
		
		//Queue<String> queue = new LinkedList<String>();
		LinkedList<String> queue = new LinkedList<String>();

		// 큐 는 FIFO 방식 처음에 들어간 값이 가장 먼저 나온다.
		queue.offer("토끼"); // 인덱스 번호 0 // offer 이나 add나 똑같다.
		queue.offer("개"); // 인덱스 번호 1 // offer 대신 add를 써도 된다.
		queue.offer("늑대"); // 인덱스 번호 2 // offer을 쓰는 이유는 큐를 이해하기 위해서

		System.out.println("**String[]********************************");
		String[] arr = queue.toArray(new String[0]);
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]); // 처음 값을 지우지않고 리턴한다.
		}
		System.out.println("**********************************");
		
		
		for (int i = 0; i < queue.size(); i++) {
			System.out.println(queue.peek() + "	:	" + (String) queue.get(i)); // 처음 값을 지우지않고 리턴한다.
			// 그러기 때문에 계속 토끼만 리턴된다.
		}

		System.out.println("**********************************");

		while (!queue.isEmpty()) // isEmpty()는 LinkedList 객체 안에 데이터가 없으면 True
									// 하나라도 있다면 False 값을 리턴하는 메소드
		{
			//String str = queue.poll(); // poll() 은 처음 값을 지우면서 리턴한다.
			String str = queue.pop(); // pop() 은 처음 값을 지우면서 리턴한다.
			System.out.println(str);
		}
		System.out.println("queue.size() : "+queue.size());

	}
}

//출력
**String[]********************************
토끼

늑대
**********************************
토끼	:	토끼
토끼	:	
토끼	:	늑대
**********************************
토끼

늑대
queue.size() : 0