데이터들을 저장할 때 특정 구조에 맞춰서 효율적으로 저장하는 것
후입선출('LIFO')방식으로 가장 최근에 들어온 데이터가 가장 먼저 나가는 자료구조
삽입 삭제 연산이 한쪽에서만 진행됨
- 배열을 이용해서 숫자를 여러개 저장할 수 있게 변수 생성
- 배열에 직접 접근할 수 없게 만들기 위해 private을 사용하고 메소드를 통해 구현
- 숫자를 어디까지 저장했는지 가리키는 최상단 지시 인덱스인 top변수 생성
- top변수를 조정하며 top에 해당하는 배열 인덱스에 값 저장 및 변경
isEmpty
스택이 비어있는지 확인하는 메소드
스택이 비어있다면
스택이 비어있음을 출력
public Boolean isEmpty(){
return (top == -1 ? true : false);
}
isFull
스택이 가득찼는지 확인하는 메소드
스택이 가득찼다면
스택이 가득찼음을 출력
public Boolean isFull(){
return (top == stack.length-1 ? true : false);
}
peek
스택 최상단 값을 반환하는 메소드
스택이 비어있지 않다면
최상단 값을 반환
public Integer peek(){
if (top == -1){
return -1;
}
return stack[top];
}
push
데이터를 저장하는 메소드
저장할 데이터를 전달 받고
스택이 가득차 있지 않으면
top을 1 증가하고 배열의 해당 인덱스 번호에 값을 저장
public void push(Integer data){
if (top >= -1 && top < stack.length-1){
top++;
stack[top] = data;
}
}
pop
데이터를 삭제하는 메소드
스택이 비어있지 않으면(조건)
top 인덱스 번호의 배열에 값을 꺼내고(삭제)
top을 1감소
public Integer pop(){
if (top < 0){
System.out.println("빈스택");
return -1;
}else {
return stack[top--];
}
}
display(새로 만들어본 메소드)
내부 데이터를 양식에 따라 출력하는 메소드
배열을 순회하며
top 이하 인덱스 값은 그대로 출력
top 초과 인덱스 값은 null출력
for (int i = 0; i < stack.length; i++) {
if (i <= top){
System.out.printf("[ %d ]",stack[i]);
}else {
System.out.printf("[ null ]");
}
}
System.out.println();
}
- 웹 브라우저 방문기록(뒤로가기)
- 실행 취소(undo) (되돌리기기능)
- 역순 문자열 만들기
- 후위 표기법 계산