2021. 3. 9. 18:39ㆍ코딩/자료구조
스택(Stack) - 데이터를 임시저장 하기위한 것으로
LIFO(Last In First Out) - 마지막에 집어넣은 데이터를 가장먼저 뽑아 오는것
(자바 프로그램에서 메소드 호출하고 실행할때 프로그램 내부에선 스택을 사용함)
큐 (Queue) - 데이터 임시저장 하기위한것으로
FIFO(First In First Out) - 처음에 집어넣은 데이터가 제일먼저 나옴
스택의 대표적 예시 로는
실행취소(ctrl + z) , 인터넷 이전페이지로 이동 등이 있음
아래는 스택과 큐를 그림으로 설명해 본것이다.
다음은 스택클래스를 구현하기위해 필요한 것들이다.
-인스턴스 변수
pointer - index의 위치
max - 스택 용량
-클래스 메소드
생성자
-인스턴스 메소드
push - 데이터 입력
pop - 데이터 출력
peek - 스택의 꼭대기 데이터
index - 검색을 통한 key값의 index찾기
clear - 스택 모든요소 제거 -> 데이터를 지우는게 아니라 스택을지운다.
capacity - 스택의 용량확인
size - 데이터의 수 확인
위의 것을 기반으로 스택클래스를 구현해 보겠다
public class stack_exercise{
int pointer;
int max; 인스턴스 변수
int[] stack;
public stack_exercise(int pointer, int max, int[] stack){
this.pointer = pointer;
this.max = max; 생성자
this.stack = stack;
}
public void push(int x){
stack[pointer++] = x;
}
public void pop(){
pointer--;
}
public int peek(){
pointer--;
}
public int index(int key){
for(int i = 0; i<=pointer; i++){
if(stack[i] == key)
return i;
}
return -1; ==> 예외처리를 위한 결과값
}
public void clear(){
pointer = 0;
}
public int capacity(){
return max;
}
public int size(){
return pointer;
}
public void show_stack(){
if(pointer<=0)
System.out.println("스택 비어있음" ) ==> 예외처리로 사용함
else{
for(int i =0; i<pointer; i++){
System.out.print(stack[i] + " ");
}
System.out.println(" ");
}
}
public static void main(Strings[] args){
int[] A = new int[32];
stack_exercise test_Stack = new stack_exercise(0,A.legnth,A);
test_stack.push(1);
test_stack.show_stack();
test_stack.push(2);
test_stack.show_stack();
test_stack.push(3);
test_stack.show_stack();
System.out.println("peek = " + test_stack.peek());
System.out.println("size = " + test_stack.size());
test_stack.pop();
test_stack.show_stack();
System.out.println("");
test_stack.clear();
test_stack.show_stack();
}
}
아래는 위코드의 실행 결과를 보여준다.
스택 코드를 작성해 보았다
pointer가 중요한 역활을 한다 -> pointer의 위치가 데이터의 삽입위치를 말해주고 MAX 크기와 비교해 용량까지 체크하는데 쓰이기 때문
하지만 위의 코드는 문제가 있는데
push, pop, peek 메소드에 문제가 존재한다
-> 위의코드에서 push pop peek메소드 내부에 스택이 비어있는경우 꽉찬경우에 대한 예외처리를 해주지 않았기 떄문이다
그래서 아래에 메소드를 다시 수정한것을 나타낸 것이다.
다음시간은 큐(Queue)에 대해서 코드를 작성해보겠다.
'코딩 > 자료구조' 카테고리의 다른 글
자료구조 11 - 재귀 알고리즘(1) (0) | 2021.03.11 |
---|---|
자료구조 10 - 스택과 큐(2) (0) | 2021.03.10 |
자료구조 08 - 이진 검색 (0) | 2021.03.07 |
자료구조 07 - 선형 검색 (0) | 2021.03.06 |
자료구조 06 - 클래스 (0) | 2021.03.06 |