Stack이란?
- 한 방향에서만 자료를 삽입, 삭제가 가능한 선형구조(LIFO - Last In First Out - 후입선출) 형태의 자료구조
- push(삽입), pop(삭제)을 사용하여 데이터의 추가 및 삭제가 가능
코드 작성 방식
1. 작성할 Stack의 크기를 입력받음
2. 입력받은 크기만큼의 배열 생성
3. 현재 위치를 표기할 index 변수 생성 후 -1로 초기화
3. 반복문을 사용하여 사용자에게서 exit명령을 입력받을 때 까지 반복하여 명령 수행
4. pop 명령 입력시 현재 배열의 인덱스값을 출력한 후, null로 초기화
- Exception 발생시, 인덱스의 범위관련 예외이므로 StackUnderflow 발생 메시지 출력
5. push 명령 입력시 현재 배열의 인덱스 값에 1을 더한 후 해당 위치에 입력값 추가
- Exception 발생시, 인덱스의 범위관련 예외이므로 StackOverflow 발생 메시지 출력
소스코드
//Stack - LIFO(후입선출)구조로 되어있는 자료구조
package data_Structure;
import java.util.Arrays;
import java.util.Scanner;
public class Stack {
public static void main(String[] args) {
System.out.print("스택의 사이즈 : ");
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
String[] arrStack;
int index = -1;
try {
arrStack = new String[Integer.parseInt(str)];
} catch (Exception e) {
System.out.println("잘못된 입력입니다.");
scan.close();
return;
}
while(!str.equals("exit")) {
System.out.println("사용할 명령을 입력하시오(push, pop, exit)");
str = scan.nextLine();
if(str.equals("pop")) {
try {
pop(arrStack, index);
index -= 1;
} catch (Exception e) {
System.err.println("StackUnderflow 발생!");
}
}else if(str.equals("push")){
System.out.println("추가할 값을 입력하시오");
str = scan.nextLine();
try {
index += 1;
push(arrStack, str, index);
} catch (Exception e) {
index -= 1;
System.err.println("StackOverflow 발생!");
}
}
}
scan.close();
System.out.println("결과값 : " + Arrays.toString(arrStack));
}
//push - 입력연산
private static String[] push(String[] arrStack, String str, int index) {
arrStack[index] = str;
System.out.println("push결과 : " + Arrays.toString(arrStack));
return arrStack;
}
//pop - 출력연산
private static String[] pop(String[] arrStack, int index) {
String temp = arrStack[index];
arrStack[index] = null;
System.out.println("pop결과 값 : " + temp);
System.out.println("stack에 남은 값 : " + Arrays.toString(arrStack));
return arrStack;
}
}
'Programming > Programming 알고리즘 연습' 카테고리의 다른 글
[Kotlin] 문자열 대소문자 변환 및 정렬 (0) | 2023.07.21 |
---|---|
[Kotlin] 이진법 변환 (0) | 2023.07.19 |
정수형태 문자열 변환(String->int, int->String) (0) | 2020.07.31 |
피보나치 수열(재귀O) (0) | 2020.07.29 |
피보나치 수열(재귀X) (0) | 2020.07.28 |