숙제: Stack 구현

JungSik Heo·2022년 9월 25일
0
post-custom-banner

1. 스택이란 아래와 같은 구조이다.

그림으로 표현 하면 아래와 같다.

즉, 가장 최근에 스택에 추가한 항목이 가장 먼저 제거될 항목이다.

스택의 구현

  • pop()
    가장 최 상위에 위치한 자료를 추출한 후에 스택에서 제거한다

  • push(item)
    스택의 최 상위에 새로운 자료를 삽입한다

  • isEmpty()
    스택이 empty 상태인지 확인한다. 비어 있으면 true를 반환한다

  • clear()
    스택에 존재하는 모든 자료들을 삭제한다

  • peek()
    가장 최 상위에 위치한 자료를 추출한다
    pop 메소드와는 달리 스택에서 제거하지는 않는다.

class Stack {
	
	private int top;
	private int stackSize;
	private char stackArr[];

	// 스택이 비어있는 상태인지 확인
	// 스택 포인터가 -1인 경우 데이터가 없는 상태이므로 true 아닌 경우 false를 return
	public boolean isEmpty() {		
		return (top == -1);
	}

	// 스택이 가득찬 상태인지 확인
	// 스택 포인터가 스택의 마지막 인덱스와 동일한 경우 true 아닌 경우 false를 return
	public boolean isFull() {		
		return (top == this.stackSize - 1);
	}

	// 스택에 데이터를 추가
	public void push(char item) {
		if (isFull()) {
			System.out.println("Stack is full!");
		} else {
			stackArr[++top] = item; // 다음 스택 포인터가 가리키는 인덱스에 데이터 추가
			System.out.println("Inserted Item : " + item);
		}
	}

	// 스택의 최상위(마지막) 데이터 추출 후 삭제
	public char pop() {
		if (isEmpty()) {
			System.out.println("Deleting fail! Stack is empty!");
			return 0;
		} else {
			System.out.println("Deleted Item : " + stackArr[top]);
			return stackArr[top--];
		}
	}

	// 스택의 최상위(마지막) 데이터 추출
	public char peek() {
		
		if (isEmpty()) {
			System.out.println("Peeking fail! Stack is empty!");
			return 0;
		} else {
			System.out.println("Peeked Item : " + stackArr[top]);
			return stackArr[top];
		}
		
	}

	// 스택 초기화
	public void clear() {
		
		if (isEmpty()) {
			System.out.println("Stack is already empty!");
		} else {
			top = -1; // 스택 포인터 초기화
			stackArr = new char[this.stackSize]; // 새로운 스택 배열 생성
			System.out.println("Stack is clear!");
		}
		
	}

	// 스택을 생성하는 생성자
	public Stack(int stackSize) {
        top = -1;    // 스택 포인터 초기화
        this.stackSize = stackSize;    // 스택 사이즈 설정
        stackArr = new char[this.stackSize];    // 스택 배열 생성
    }

	// 스택에 저장된 모든 데이터를 출력
	public void printStack() {
		if (isEmpty()) {
			System.out.println("Stack is empty!");
		} else {
			System.out.print("Stack elements : ");
			for (int i = 0; i <= top; i++) {
				System.out.print(stackArr[i] + " ");
			}
			System.out.println();
		}
	}

}



public class StackTest {
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		System.out.print("스택 사이즈를 입력하시오.");
		int stackSize = sc.nextInt() ;
		
		Stack stack = new Stack(stackSize);

		stack.push('A');
		stack.printStack();

		stack.push('B');
		stack.printStack();

		stack.push('C');
		stack.printStack();

		stack.pop();
		stack.printStack();

		stack.pop();
		stack.printStack();

		stack.peek();
		stack.printStack();

		stack.clear();
		stack.printStack();
	}
}

profile
쿵스보이(얼짱뮤지션)
post-custom-banner

0개의 댓글