• 스택, 큐 사용하기 JAVA

    2021. 10. 30.

    by. 순일

    큐는 먼저 들어간 데이터가 먼저 나오는 FIFO 구조이고, 스택의 경우 마지막에 저장한 데이터를 먼저 꺼내는 LIFO 구조로 되어있다.

    먼저 스택의 경우 import java.util.Stack;를 통해 먼저 importf를 해주고 Stack<자료형> 객체명 = new Stack<>(); 와 같은 방식으로 객체를 선언해 사용한다.

    스택 메서드

    boolean empty() - true , false로 비었는지 리턴해 준다.

    Object peek() - 스택의 최상위 (마지막에 넣은) 객체를 반환 / Only 출력 개념

    Object pop() - 스택의 최상위 객체를 꺼낸다 / 꺼내면 객체는 사라짐

    Object push(Object item) - 스택에 객체를 저장한다.

     

    import java.util.Scanner;
    import java.util.Stack;
    
    public class Main {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Scanner in = new Scanner(System.in);
    		Stack<Integer> s = new Stack<>(); //스택 객체를 선언해준다 뒤에<>는 안에 변수형 생략 가능
    		
    		System.out.println("스택 메뉴");
    		System.out.println("1. push");
    		System.out.println("2. pop");
    		System.out.println("3. empty");
    		
    		while(true) {
    			System.out.print("메뉴를 선택하세요: ");
    			int menu = in.nextInt();
    			switch (menu) {
    			case 1: {
    				System.out.print("push할 숫자 입력: ");
    				int a = in.nextInt();
    				s.push(a); // push 메서드 사용해서 입력 숫자 push
    				break;
    			}
    			case 2: {
    				if(s.empty()) { 
    					System.out.println("스택이 비었습니다.");
    				}
    				else {
    					System.out.print("pop한 숫자는 : ");
    					System.out.println(s.peek()); // 마지막 데이터를 출력해줌
    					s.pop(); // 마지막 데이터를 제거
    				}
    				break;
    			}
    			case 3:{
    				if(s.empty()) {
    					System.out.println("스택이 비었습니다.");
    				}
    				else {
    					System.out.println("스택이 차있습니다.");
    				}
    				break;
    			}
    			default:
    				System.out.println("올바를 숫자를 입력하세요.");
    			}
    		}
    	}
    }

     

    위의 소스는 간단하게 스택 클래스를 이용해 스택을 구현해 본 소스 코드이다.

     

    다음은 큐의 경우 import java.util.Queue; , import java.util.LinkedList;를 import 하여 사용한다. 선언은 LQueue<변수형> 객체명 = new LinkedList<>();로 선언을 한다.

     

    큐 메서드

    boolean isEmpty() - true , false로 비었는지 리턴해 준다.

    boolean offer(Object o) - Queue에 객체 저장 ( true : 성공, false : 실패 ) 반환

    Object peek() - 저장된 객체를 반환 / 없을 경우 Null 을 반환

    Object poll() - 객체를 꺼내온다 / 꺼낸 객체는 사라진다.

     

    import java.util.LinkedList;
    import java.util.Queue;
    import java.util.Scanner;
    
    
    public class Main {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Scanner in = new Scanner(System.in);
    		
    		Queue<Integer> q = new LinkedList<>();
    		
    		System.out.println("큐 메뉴");
    		System.out.println("1. offer");
    		System.out.println("2. poll");
    		System.out.println("3. isEmpty");
    		
    		while(true) {
    			System.out.print("메뉴를 선택하세요: ");
    			int menu = in.nextInt();
    			switch (menu) {
    			case 1: {
    				System.out.print("offer할 숫자 입력: ");
    				int a = in.nextInt();
    				q.offer(a);
    				break;
    			}
    			case 2: {
    				if(q.isEmpty()) {
    					System.out.println("큐가 비었습니다.");
    				}
    				else {
    					System.out.print("poll한 숫자는 : ");
    					System.out.println(q.peek());
    					q.poll();
    				}
    				break;
    			}
    			case 3:{
    				if(q.isEmpty()) {
    					System.out.println("큐가 비었습니다.");
    				}
    				else {
    					System.out.println("큐가 차있습니다.");
    				}
    				break;
    			}
    			default:
    				System.out.println("올바를 숫자를 입력하세요.");
    			}
    		}
    	}
    }

    위의 소스는 간단하게 큐 클래스를 이용해 큐를 구현해 본 소스 코드이다.

    728x90

    댓글