[JAVA] Stack & Queue 구현하기

WOOK JONG KIM·2022년 9월 13일
0

패캠_java&Spring

목록 보기
14/103
post-thumbnail

Stack의 특징

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

import ch01.MyArray;

public class MyArrayStack {

	MyArray arrayStack;
	int top;
	
	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 boolean isFull()
    {
    	if ( top == arrayStack.ARRAY_SIZE){
        return true;
        }
        else return false;
	}
    
	public int pop()
	{
    // isEmpty 구현 하는 것도 좋음
		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();
	}

}

Queue의 특징

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

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

package ch04;

import ch03.MyLinkedList;
import ch03.MyListNode;

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;
	}
	
	@Override
	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");
	}

	@Override
	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();
	}

}
profile
Journey for Backend Developer

0개의 댓글