티스토리 뷰
자료구조 공부
오늘은 스택에 대해서 공부하겠습니다.
스택은 자료구조중 하나로 후입선출 특징인 자료 구조 입니다. LIFO(Last-IN First-Out)이라고 합니다.
즉, 먼저들어온 데이터가 가장 나중에 나가는 형태의 자료 구조입니다.
통상 push()를 이용하여 데이터를 삽입하고 pop()을 이용하여 데이터를 뽑습니다.
1, 5 , 6 , 7의 데이터를 스택의 삽입한다면
7
6
5
1
위와 같은 형태로 삽입됩니다. 여기서 pop을 이용하여 데이터를 뽑아내면
6
5
1
위와 같이 자료구조의 담긴 데이터가 바뀌고 가장 나중에 삽입한 7은 뽑아지겟죠?
스택은 위와 같이 자료를 저장하는 자료구조입니다.
자바로 구현해보겠습니다.
우선 금융공기업 전산직 기출문제를 이용하여 구현해보겠습니다.
문제)
스택(Stack) 알고리즘을 Java 또는 C++의 클래스로 구현하시오(15점)
(단, 변수명 및 상수명은 다음과 같이 사용할 것
- 클래스명 :Stack
- 스택 저장소명 : Item(Integer의 배열)
- 스택 저장소의 최대 크기 : MAX
- 스택 포인터 : top
즉흥적으로 구현한 스택 (학부시절 배운내용을 기반으로)
아래는 내가 처음 작성한 스택
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
31
32
33
34
35
36
37
38
39
40
41
42
43 |
package datastructure;
import java.util.Arrays;
public class Stack {
private int top=0;
final int MAX = 10;
private int[] item = new int[MAX];
public void push(int a)
{
if((top-1) == MAX)
{
System.out.println("스택이 가득 찾습니다");
}else
{
item[top] = a;
top++;
System.out.println("입력되었습니다");
}
}
public int pop()
{
return item[top--];
}
@Override
public String toString() {
return "Stack [top=" + top + ", MAX=" + MAX + ", item=" + Arrays.toString(item) + "]";
}
public static void main(String[] args) {
Stack stack = new Stack();
stack.push(1);
stack.push(6);
stack.push(7);
System.out.println(stack.pop());
stack.push(3);
System.out.println(stack.pop());
System.out.println(stack);
}
}
|
cs |
위에는 처음 즉흥적으로 짜본 스택코드
부실하기 짝이없다... 우선 필드부터 잘못지정되었고 생성자로 초기화해줘야되는데 그게 없다...
다시 만들어봐야겠다.
아래는 다시 수정한 배열 스택
생성자 초기화부분을 수정하고 더이상 빼낼 자료가 없을때 콘솔로 출력해준다.
try-catch 문을 써서 바운드익셉션을 추가해도 될것 같다.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 |
package datastructure;
import java.util.Arrays;
public class Stack {
final int MAX = 10;
private int top;
private int[] item;
public Stack()
{
this.top = 0;
this.item = new int[MAX];
}
public void push(int input)
{
if(top >= MAX)
{
System.out.println("스택이 가득 찾습니다");
}else
{
item[top] = input;
top++;
System.out.println(input + " 입력되었습니다");
}
}
public int pop()
{
if(top <=0 )
{
System.out.println("데이터가 없습니다");
return 0;
}else
{
return item[--top];
}
}
public static void main(String[] args) {
Stack stack = new Stack();
stack.push(1);
stack.push(6);
stack.push(7);
System.out.println(stack.pop());
stack.push(3);
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
stack.push(32);
System.out.println(stack.pop());
}
}
|
cs |
'자료구조 > JAVA' 카테고리의 다른 글
[Java 개념]7. 객체와 클래스 (정리중) (0) | 2017.01.07 |
---|
- Total
- Today
- Yesterday
- 딥러닝 gpu 설정
- django app
- removeNode()
- gpu사용량
- 딥러닝 GPU #pytorch gpu
- pytorch GPU
- removeNode
- 장고앱
- Android Studio 키
- 엘리먼트삭제
- 딥러닝 gpu 사용량
- 이미지 전처리
- sp_procxmode#
- 전경추출
- SET CHAINED OFF
- Grabcut
- Java
- 안드로이드 키
- 이미지전처리
- 파이토치
- 파이토치 gpu 사용량
- 장고프로젝트
- Django
- 한림대의료원#친환경캠페인#감탄캠페인#종이 절약#에코한림
- django 웹서버
- 노드삭제
- 안드로이드 사인키
- 생활속탄소저감 #감탄캠페인 #나는 오늘도 감탄을 했다 #에코한림
- 이미지 배경제거
- unchained transaction mode
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |