한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지_패스트 캠퍼스 챌린지 24일차

2021. 9. 29. 20:26IT공부/Java&Spring 이용한 웹프로그래밍

04. 스택(Stack) 구현하기

Stack의 특징

  • 맨 마지막 위치(top)에서만 자료를 추가,삭제, 꺼내올 수 있음 ( 중간의 자료를 꺼낼 수 없음)
  • Last In First Out ( 후입선출 ) 구조
  • 택배 상자가 쌓여있는 모양
  • 가장 최근의 자료를 찾아오거나 게임에서 히스토리를 유지하고 이를 무를때 사용할 수 있음
  • 함수의 메모리는 호출 순서에 따른 stack 구조
  • jdk 클래스 : Stack

배열을 활용하여 Stack 구현하기

MyArrayStack.java

import array.MyArray;

public class MyArrayStack {

           int top;

           MyArray arrayStack;

           public MyArrayStack() {

                   top = 0;

                   arrayStack = new MyArray();

           }

           public MyArrayStack(int size) {

                  arrayStack = new MyArray(size);

           }

           public void push(int data) {

                    if(isFull()){

                        System.out.println("stack is full");

                        return;

                      }

                     arrayStack.addElement(data);

                     top++;

            }

          public int pop() {

                  if (top == 0){

                      System.out.println("stack is empty");

                      return MyArray.ERROR_NUM;

                  }

                  return arrayStack.removeElement(--top);

}

public int peek() {

           if (top == 0){

                  System.out.println("stack is empty");

                   return MyArray.ERROR_NUM;

             }

             return arrayStack.getElement(top-1);

}

public int getSize() {

          return top;

}

public boolean isFull() {

              if(top == arrayStack.ARRAY_SIZE){

                    return true;

               }

              else return false;

} public boolean isEmpty() {

                 if (top == 0){

                         return true;

                  }

                   else return false;

     }

   public void printAll() {

            arrayStack.printAll();

   }

}

 

MyArrayStackTest.java

public class MyArrayStackTest {

            public static void main(String[] args) {

                   MyArrayStack stack = new MyArrayStack(3);

                        stack.push(10);

                        stack.push(20);

                        stack.push(30);

                        stack.push(40);

                        stack.printAll();

                      System.out.println("top element is " + stack.pop());

                       stack.printAll();

                       System.out.println("stack size is " + stack.getSize());

               }

}

-> 스택은 후입선출의 형식이라서 가장 마지막에 넣은게 가장 위에 쌓이듯이 꺼낼때는 가장 마지막에 넣은

     (제일 위에있는 데이터)를 뽑아가야 하기 때문에 그 부분을 잘 생각하고 구현해야 한다고 생각합니다.

05. 큐(Queue) 구현하기

Queue의 특징

  • 맨 앞(front) 에서 자료를 꺼내거나 삭제하고, 맨 뒤(rear)에서 자료를 추가 함
  • Fist In First Out (선입선출) 구조
  • 일상 생활에서 일렬로 줄 서 있는 모양
  • 순차적으로 입력된 자료를 순서대로 처리하는데 많이 사용 되는 자료구조
  • 콜센터에 들어온 문의 전화, 메세지 큐 등에 활용됨
  • jdk 클래스 : ArrayList

연결 리스트를 활용하여 Queue 구헌하기

MyListQueue.java

import linkedlist.MyListNode;

import linkedlist.MyLinkedList;

interface IQueue{

               public void enQueue(String data);

               public String deQueue();

               public void printAll();

}

public class MyListQueue extends MyLinkedList implements IQueue{

                MyListNode front;

                MyListNode rear;

                public MyListQueue() {

                   front = null;

                   rear = null;

                }

                public void enQueue(String data) {

                    MyListNode newNode;

                     if(isEmpty()) //처음 항목 {

                       newNode = addElement(data);

                       front = newNode;

                       rear = newNode;

                     }

                     else {

                       newNode = addElement(data);

                       rear = newNode;

                     }

                     System.out.println(newNode.getData() + " added");

                  }

                public String deQueue() {

                   if(isEmpty()){

                     System.out.println("Queue is Empty");

                     return null;

                    }

                  String data = front.getData();

                  front = front.next;

                  if( front == null ){ // 마지막 항목

                       rear = null;

                   }

                  return data;

               }

                public void printAll() {

                   if(isEmpty()){

                       System.out.println("Queue is Empty");

                        return;

                   }

                   MyListNode temp = front;

                   while(temp!= null){

                        System.out.print(temp.getData() + ",");

                        temp = temp.next;

                   }

                   System.out.println();

             }

}

->  큐의 구조는 스택과 다르게 '선입선출'의 구조를 가지고 있습니다. 스택은 막힌 박스와 같아 먼저 들어온 것이 가장 나중에 나가는 구조지만, 큐는 먼저 들어온 것이 먼저 나가는 구조입니다. 예를 들어 은행에 있는 번호표가 있습니다. 은행에 방문하여 기다리는데, 저보다 늦게 온 다른 분이 먼저 업무를 본다면 기분이 나쁠 것입니다.

먼저 온 손님은 늦게 온 손님보다 먼저 서비스를 받게 하기 위해서 은행에서는 번호표를 나눠줍니다. 이러한 은행의 번호표의 체계가 큐(Queue)라고 생각합니다. 따라서 큐를 기억하고 싶다면 은행에 있는 번호표를 먼저 떠오르면 쉽게 이해할 수 있을 거라고 생각합니다. 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

강의에 대해 정확하게 알고 싶다면 

https://bit.ly/37BpXiC