스택 구현

박은빈·2022년 9월 27일

코딩

목록 보기
4/19

push, pop, peek, clear, isFull, isEmpty를 구현하라

  1. 스택을 위해 배열의 크기를 입력받음
  2. 생성자에 배열의 크기를 입력받고 stack의 크기를 추적하기 위한 num을 초기화하고 stackSize를 입력받음
  3. isEmpty : num이 0이면 스택이 비어있음
  4. isFull : num와 stackSize가 같으면 스택이 가득 차있음
  5. push : 메서드의 인자를 배열에 넣고 num++를 한다
    1. 만약 스택이 가득 차있으면 못넣게 한다
  6. pop : num의 번수에 있는 배열을 ‘0’으로 초기화한다
    1. 만약 스택이 비어있으면 못없애게 한다
  7. peek : num번수에 있는 배열을 출력한다
    1. 만약 스택이 비어있으면 출력을 못하게 한다
  8. clear : for문으로 num번째전까지의 배열을 ‘0’으로 초기화한다
    1. 만약 스택이 비어있으면 초기화를 못하게한다
  9. showStack : 현재 스택을 보여주기위해 num전까지 for문으로 배열을 보여준다
    1. 만약 스택이 비어있으면 스택이 비어있다고 출력한다

코드


import java.util.Scanner;

interface Stack {
	public boolean isEmpty();

	public boolean isFull();

	public void push(char item);

	public void pop();

	public void peek();

	public void clear();
}

class MyStack implements Stack {
	int num;
	int stackSize;
	char[] stack;

	public MyStack(int stackSize) {
		num = 0;
		this.stackSize = stackSize;
		stack = new char[stackSize];
	}

	@Override
	public boolean isEmpty() {
		if (num == 0)
			return true;
		else
			return false;
	}

	@Override
	public boolean isFull() {
		if (num >= stackSize)
			return true;
		else
			return false;
	}

	@Override
	public void push(char item) {
		if (isFull()) {
			System.out.println("스택이 가득 차 있습니다");
		} else {
			stack[num] = item;
			System.out.println("추가된 문자 : " + stack[num]);
			num++;
		}
	}

	@Override
	public void pop() {
		if (isEmpty()) {
			System.out.println("스택이 비어있습니다");
		} else {
			System.out.println("삭제된 문자 : " + stack[num - 1]);
			stack[num - 1] = '0';
			num--;
		}
		

	}

	@Override
	public void peek() {
		if (isEmpty()) {
			System.out.println("스택이 비어있습니다");
		} else {
			System.out.println("최상위 문자 : " + stack[num - 1]);
		}
	}

	@Override
	public void clear() {
		if (num == 0) {
			System.out.println("스택이 비어있습니다");
		} else {
			for (int i = 0; i < num; i++) {
				stack[i] = '0';
			}
			num = 0;
			System.out.println("클리어 성공");
		}
	}

	public void showStack() {
		if (num == 0) {
			System.out.println("스택이 비어있습니다");
		} else {
			System.out.print("현재 스택 : ");
			for (int i = 0; i < num; i++) {
				System.out.print(stack[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();

		MyStack ms = new MyStack(stackSize);

		int select = 0;
		char pushC = '0';
		boolean tf = true;

		while (tf) {
			System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ");
			System.out.println("1.push | 2.pop | 3.peek | 4.isEmpty | 5.isFull | 6.clear | 7.showStack");
			System.out.print("번호 선택 : ");
			select = sc.nextInt();
			System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ");
			switch (select) {
			case 1:
				System.out.print("글자 입력 : ");
				pushC = sc.next().charAt(0);

				ms.push(pushC);
				break;
			case 2:
				ms.pop();
				break;
			case 3:
				ms.peek();
				break;
			case 4:
				if (ms.isEmpty()) {
					System.out.println("스택이 비어있습니다");
				} else {
					System.out.println("스택에 데이터가 있습니다");
				}
				break;
			case 5:
				if (ms.isFull()) {
					System.out.println("스택이 가득차있습니다");
				} else {
					System.out.println("스택이 가득차지 않았습니다");
				}
				break;
			case 6:
				ms.clear();
				break;
			case 7:
				ms.showStack();
				break;
			default:
				System.out.println("숫자를 다시 입력해 주세요");
			}
		}
	}

}
profile
안녕하세요

0개의 댓글