본문 바로가기
programming/java

[java] 자료구조 스택 코드 구현

by 몽구스_ 2021. 1. 5.
728x90

 

스택이란,

LIFO(후입선출)의 형태를 가진 자료구조이다.

쉽게 말해 스택에 항목이 쌓이는 형태를 말한다.

 

top은 제일 위에 있는 항목이자 제일 나중에 들어간 항목을 가리킨다.

그러므로 스택이 빈 상태는 top이 -1이다.

 

pop은 제일 위의 항목을 빼내는 함수이고,

peek는 제일 위의 항목을 빼지 않고 엿보는 함수이다.

 

 

 

public class StackTest{
	public static void main(String[] args){
		MyStack stack = new MyStack(10);
		if(stack.isEmpty()){
			System.out.println("스택이 비어있습니다.");
		}
		
		for (int i = 1; i <= 10; i++) {
			stack.push(i);
		}
		
		if(stack.isFull()){
			System.out.println("스택이 가득 찼습니다.");
		}
		System.out.println("최상위 숫자 : " + stack.peek());
		System.out.println("최상위에서 꺼낸 숫자 : " + stack.pop());
		System.out.println("최상위에서 꺼낸 숫자 : " + stack.pop());
		System.out.println("");
		System.out.println("== 스택 리스트 ==");
		
		for (int i = 1; i <= 10; i++) {
			int num = stack.pop();
			if(num != -1)
				System.out.println(num);
		}
	}
}
class MyStack{
	private int[] stack;
	private int top = -1;

	public MyStack() {
		stack = new int[10];
		
	}
	
	public MyStack(int i) {
		stack = new int[i>0?i:10];//i가 0보다 클경우는 i가 배열의 크기, 아닐 경우 10으로 
		
	}

	public int peek() {
		return stack[top];
	}

	public int pop(){
		if(isEmpty())
			return -1;
		else {
			int p = stack[top];
			top--;
			return p;
		}
	}

	public void push(int i) {
		if(isFull())
			System.out.println("스택이 꽉 찼습니다.");
		else {
			top++;
			stack[top] = i;
		}
	}

	public boolean isEmpty() {
		if(top == -1)
			return true;
		return false;
	}
	
	public boolean isFull() {
		if(top == stack.length-1)
			return true;
		return false;
	}

'programming > java' 카테고리의 다른 글

[java] 비트쉬프트연산자로 부분집합 출력, 갯수세기  (0) 2021.01.19
[java] JDBC  (0) 2021.01.05
[java] 선택정렬  (0) 2021.01.01
[java] Cipher암호화하여 문자열 출력하기  (0) 2021.01.01
[java] split, trim  (0) 2021.01.01

댓글