본문 바로가기

CS/자료구조

스택(Stack)

- 마지막에 입력된 자료가 가장 먼저 출력되는 LIFO 방식으로 작동한다.

- top이라는 인덱스 위치를 통해 삽입(push)과 삭제(pop)가 이루어지며, 초기상태의 top0또는 1이 된다.

- Top의 최대 크기는 스택의 크기에 의해 결정된다.

- 저장장치에 물리적으로 어떻게 표현되느냐가 스택을 특징짓는 것이 아니라 스택이라는 논리적 구조의 동작이 스택의 특징을 결정한다.

 

응용분야

- 서브루틴 호출시 복귀 주소(return address) 저장

- 순환 프로그램(Recursive Program) 수행 시

- 인터럽트 발생 시 상태 저장

- 후위식(Postfix) 변환

- 버퍼

- 트리 운행 시(inorder, postorder, outorder)

- 그래프에서 깊이 우선 탐색(DFS)

- 퀵 정렬(quick sort) 수행 시
- 미로 찾기

 

JAVA 코드  

package com.cs0210;

public class StackArr {
	private int top;
	private int size;
	private char[] arr;

	public StackArr(int size) {
		top = -1;
		this.size = size;
		arr = new char[size];
	}

	public boolean isEmpty() {
		return (top == -1);
	}

	public boolean isFull() {
		return (top == this.size - 1);
	}

	public void push(char data) {
		if (isFull())
			System.out.println("포화 상태입니다.");
		else {
			arr[++top] = data;
		}
	}

	public char pop() {
		if (isEmpty()) {
			System.out.println("비어있습니다.");
			return 0;
		} else {
			return arr[top--];
		}
	}

	public char peek() {
		if (isEmpty()) {
			System.out.println("비어있습니다.");
			return 0;
		} else {
			return arr[top];
		}
	}

	public static void main(String[] args) {
		int size = 3;
		StackArr stack = new StackArr(size);

		stack.push('A');
		System.out.println(stack.peek());

		stack.push('B');
		System.out.println(stack.peek());

		stack.push('C');
		System.out.println(stack.peek());

		System.out.println("pop : " + stack.pop());
		System.out.println(stack.peek());

		System.out.println("pop : " + stack.pop());
		System.out.println(stack.peek());

		System.out.println("pop : " + stack.pop());
		System.out.println(stack.peek());

		System.out.println("pop : " + stack.pop());
		System.out.println(stack.peek());

		System.out.println("pop : " + stack.pop());

	}
}

 

'CS > 자료구조' 카테고리의 다른 글

그래프(Grape)  (0) 2021.02.18
트리(Tree)  (0) 2021.02.18
큐(Queue)  (0) 2021.02.18
연결 리스트란  (0) 2021.02.18