일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- AWS
- JVM
- 요리
- MySQL
- it
- java
- ReactJS
- 맛집
- Gradle
- Oracle
- php
- linux
- devops
- Spring Batch
- Web Server
- ubuntu
- jsp
- Design Patterns
- laravel
- redis
- Spring Boot
- db
- tool
- IntelliJ
- springboot
- Spring
- javascript
- Git
- jenkins
- elasticsearch
Archives
- Today
- Total
아무거나
stack 구현 본문
반응형
[자바로 스택(stack) 구현]
* 스택은 먼저 들어간것이 먼저 나온다.
- 스택오버플로우란 스택이 꽉찼을때 아이템을 push하려고 하는 행위(더 이상 데이터가 들어갈 자리가 없을때)
- 스택언더플로우란 스택안에 데이터가 하나도없을때 pop을 하려고하는 경우라한다.
1. 스택 오버플로우 / 언더플로우 예제
[예제]
package test;
public class NumStack {
private int[] arr; // stack
private int top = 0; // index(arr index)
public NumStack(int stackSize) {
this.arr = new int[stackSize];
}
public static void main(String[] args) {
// case 1: 1,2,3이 push된걸 출력
// case 2: 4가 들어갈땐 스택사이즈가 3이므로 4는 안들어가므로 stackoverflow 발생 출력
// case 3: pop을 두번실행 했으므로 기존 3까지 들어간 상황에서 3, 2를 뺴줬으므로 결과가 3, 2로 출력된걸 볼 수 있다.
NumStack st = new NumStack(3);
st.push(1);
st.push(2);
st.push(3);
st.push(4);
System.out.println(st.pop());
System.out.println(st.pop());
}
private void push(int i) {
if(top < arr.length) {
arr[top++] = i; // 배열에 먼저 넣어주고 top이 올라간다.
System.out.println("pushed: "+i);
} else {
System.out.println("stack is full");
}
}
private int pop() {
if(top > 0) {
return arr[--top];
} else {
// top 0일때
throw new java.util.NoSuchElementException();
}
}
}
2. 실제로 스택은 어떻게 사용되는가?
- browser back button을 볼 수 있다.
예를들어, 브라우저에서 구글을 접속하고 유투브에 들어가서 어떤 동영상을 보려고 들어갔을때
google -> youtube home -> video 순으로 스택이 쌓이게 된다. 그 다음 만약 뒤로가기 버튼을 클릭했을 경우
유투브 홈으로 이동하게 된다. 또 뒤로가기를 클릭하면 구글홈페이지를 보여주게 된다.
이유는 스택은 LIFO - Last in First out (후입선출) 이기 때문이다. (나중에 들어온것이 먼저 나간다.)
반응형
'Java & Kotlin > Java' 카테고리의 다른 글
java this 키워드 (0) | 2019.06.28 |
---|---|
java로 queue 구현 (0) | 2019.06.27 |
java hashmap 사용시 value에 어떠한 자료형이와도 상관없이 출력할 때 (0) | 2019.06.26 |
split 메서드 사용시 실수(. 관련) (0) | 2019.06.25 |
객체지향 프로그래밍 (0) | 2019.06.25 |
Comments