Step-by-Step

[자료구조] 스택(Stack)과 Java로 구현 본문

CS공부/자료구조

[자료구조] 스택(Stack)과 Java로 구현

희주(KHJ) 2021. 12. 8. 20:17

스택(Stack)

LIFO(Last In First Out) 특성을 가진 자료구조

메모리에 들어오는 데이터 위치가 메모리 말단(Top Pointer)이고

쓰기 위해 내보내는 데이터 역시 메모리 말단을 거친다

 

스택의 추상자료형(Abstract Data Type; ADT)

- 입력연산 : 푸시(Push)

- 출력연산 : 팝(Pop)

- 조회연산 : 피크(Peek)

※ 조회연산은 탑 포인터가 가리키는 데이터를 조회만 할 뿐 탑의 순번(인덱스)은 변화시키지 않는다

 

스택의 Push, Pop 과정

1. Push

- 먼저 Top Pointer의 값을 증가 시킨 후, 증가시킨 Top의 위치에 데이터를 넣는다

2. Pop

- 먼저 데이터를 꺼낼 Top의 위치를 다른 변수(인덱스)에 별도로 저장한 후, Top의 위치를 감소시킨다

- 저장해 놓은 인덱스 위치의 값을 Pop 한다

 

Java로 구현 (ArrayList 이용)

import java.util.ArrayList;

public class stackRealization {
	public static void main(String[] args){
		Stack<Integer> stack = new Stack<Integer>();	//Integer 타입으로 생성
		
		int size = 0;
		
		System.out.println("----push----");
		for(int i=0; i<5; i++) {
			int num=i;
			stack.push(num);
			System.out.println(num);
		}
		
		System.out.println("----peek----");
		System.out.println(stack.peek());
		
		System.out.println("----search----");
		System.out.println(stack.search(3));
		
		size = stack.size();	//나머지 pop하기 위해 사이즈 구함
		System.out.println("----pop----");
		for(int i=0; i<size; i++) {
			System.out.println(stack.pop());
		}
		
		System.out.println("----isEmpty----");	//Empty면 끝
		if(stack.empty())
			System.out.println("clear!");
	}
}


class Stack<E> {
	ArrayList<E> stack = new ArrayList<E>();
	private int top = -1;
	
	void push(E element) {
		stack.add(++top, element);
	}
	
	E pop() {
		int idx = top;
		top--;
		return stack.remove(idx);
	}
	
	E peek() {
		return stack.get(top);
	}
	
	boolean empty() {
		if(stack.size()==0)
			return true;
		return false;
	}
	
	int search(E element) {
		if(stack.contains(element))		//해당 요소가 있는지 확인
			return top-stack.indexOf(element)+1;	//리턴해야 하는 인덱스는 top부터 1번임
		return -1;		//없으면 -1 리턴
	}
	
	int size() {
		return stack.size();
	}
}

- 배열의 크기를 조절할 수 있는 ArrayList를 이용하여 구현

- 제네릭 컬렉션 클래스로 만들었고 Integer 형태로 구현하여 실행하였음

 

참고로 그림은 내가 직접 PPT를 이용하여 그려보았다!!

※ 글의 내용은 명품 Java Programming 책과 나무위키를 참고하여 작성하였습니다

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

[자료구조] 큐(Queue)와 Java로 구현  (0) 2021.12.12
[자료구조] 순환  (0) 2021.12.08
[자료구조] 추상 데이터 타입  (0) 2021.12.02
자료구조와 알고리즘  (0) 2021.12.02
[Graph] 그래프  (0) 2021.07.05
Comments