[문항3] stack 메모리 구조를 Java로 간단히 구현하시오.
3.1. ArrayStack 클래스에 생성자를 정의하시오. [10점]
- 스택의 크기는 생성자로 설정한다.
- 즉, 생성자를 통해 1차원 배열 생성하여 멤버 변수 arr에 저장하시오.
3.2. ArrayStack 클래스에 push 메소드를 정의하시오. [15점]
- push 메소드는 스택에 값을 저장한다.
- 즉, push 메소드를 통해 멤버 변수 arr에 정수값이 저장된다.
- 저장되는 값이 배열의 길이를 초과하면 ‘스택이 꽉 찼습니다! 용량 초과!’를 출력하시오.
3.3. ArrayStack 클래스에 pop 메소드를 정의하시오. [15점]
- pop 메소드는 스택에 값을 꺼내온다.
- 즉, pop 메소드를 통해 멤버 변수 arr의 정수값이 리턴된다.
- 배열에 저장된 값을 모두 꺼내오면, ‘스택이 비었습니다!’를 출력하시오.
<< 해당 문제의 의도 >>
1. 클래스를 사용하여 스택 메모리 구조를 구현하는 방법을 이해합니다.
2. 클래스의 생성자를 사용하여 스택의 초기 상태를 설정하는 방법을 이해합니다.
3. push 메소드를 사용하여 스택에 값을 저장하는 방법을 이해합니다.
4. pop 메소드를 사용하여 스택에서 값을 꺼내오는 방법을 이해합니다.
5. 배열을 사용하여 스택을 구현하는 방법을 이해합니다.
class ArrayStack{ } : Array Stack 클래스는 정수형 배열을 이용하여 스택을 구현, 후입선출(LIFO) 형태
int[] arr; : 스택 요소를 저장하는 정수형 배열.
int top = -1; : 스택의 맨 위의 요소의 인덱스를 나타내는 변수로 초기값은 -1 로 설정.
public ArrayStack(int size) { arr = new int[size]; } : ArrayStack 클래스의 생성자를 정의. 생성자는 객체가 생성될 때 호출되며, 일반적으로 객체의 초기화 작업을 수행. 생성자를 통해 스택의 크기를 지정하며 해당 크기의 정수형 배열을 생성. 'int size'는 생성할 스택의 크기를 나타내며, arr 배열의 크기로 사용.
int peek() { return arr[top]; } : 스택의 맨 위에 있는 요소를 반환하는 peek 메서드.
push method : 스택에 새로운 요소를 추가한다.
if(top +1 == arr.length) { System.out.println("스택이 꽉 찼습니다! 용량초과!"); return; } : If 문을 사용하여 스택이 가득 찼는 지 확인.
조건이 충족되면 출력하고 메서드를 종료.
top++; : 현재 스택의 맨 위를 가리키는 인덱스를 1증가시키는 작업. (증감식)
arr[top] = num; : 현재 스택의 맨 위에 있는 위치에 값을 삽입하는 작업을 수행. top은 현재 스택의 맨 위를 가리키는 인덱스. num은 스택에 삽입될 값.
int pop() { } : pop 메서드는 스택에서 데이터 추출.
if(top == -1) { System.out.println("스택이 비었습니다."); return -1;} : 현재 코드에서는 스택이 비어 있는 경우에 top 변수가 -1로 설정
되었을 때도 top 값을 반환.
return arr[top--]; : top 인덱스에 위치한 값을 반환하고 top을 하나 감소시키는 구문. 후위 감소 연산자를 사용하여 top을 감소시킨 후에 반환하는 것을 의미. top 인덱스에 위치한 값을 반환하고 top을 1만큼 감소시키는 것. pop() 메소드를 호출할 때마다 스택에서 하나의 요소를 추출하고 top을 감소.
public class Quiz03 { } : Quiz03 클래스를 사용하여 ArrayStack 클래스를 테스트하는 코드.
ArrayStack stack = new ArrayStack(5); : Array Stack 객체를 생성하고 크기가 5인 스택 생성.
Push() : 스택에 여러 요소를 추가.
Peek() : 스택의 맨 위에 있는 아이템 출력.
Pop() : 스택에 여러 요소를 추출하고 출력.
'JAVA' 카테고리의 다른 글
[JAVA] 자바 변수(variable) 선언 및 초기화 (0) | 2024.05.12 |
---|---|
[JAVA] For문과 향상된 For문을 이용하여 반복문 실행하기 (2) | 2024.05.01 |
[JAVA] Static, Stack, Heap | Java 메모리 영역의 구조와 특징 (0) | 2024.04.23 |
[JAVA] JVM(자바 가상머신) 과 메모리 구조 (0) | 2024.04.23 |
[JAVA] 인터페이스 (Interface) (2) | 2024.04.19 |