Data Structure - *Stack and Queue
자료구조
자료를 어떻게 효율적으로 조직, 관리 저장
데이터 값의 모임, 또는 데이터 간의 관계, 그리고 데이터에 적용할 수 있는 함수 나 명령
스택과 큐는 데이터의 추상적 형태와 그걸 다루는 방법 (Abstract Data Type)
스택이란? (Stack)
- 데이터를 집어넣는 선형(linear) 자료형이고 LIFO(Last in Last Out)이라는 특징을 가지고 있다. LIFO는 마지막에 넣은 것이 가장 먼저 나온다는 의미로 접시를 쌓아놓으면 가장 나중에 넣은 접시를 가장 먼저 뺀다는 느낌으로 이해하면 쉽다.
- 데이터를 집어넣는 작업은 push, 빼내는 작업은 pop, 그리고 맨 나중에 넣은 데이터를 확인하는 peek 같은 작업을 할 수 있다.
- 이전의 작업 내용을 저장해 둘 필요가 있을 때 널리 사용된다. 바로 최근껄 볼 수 있게 할 때...
스택의 Method
- pop(): 스택의 가장 위 요소를 뺀다.
- push(): 요소를 추가한다.
- peek(): 스택에 가장 위에있는, 즉 가장 최근에 추가한 요소를 반환한다.
- empty(): 스택이 비었는지 확인 후 비었으면 true, 아니면 false를 반환한다.
- swap(): 스택의 자료를 스왑할 수 있다.
스택의 Pseudocode
- 새로운 클래스를 하나 만들어준다.
- Constructor 함수로 빈 배열을 만들어 준다. (this 설정)
- push라는 함수를 실행하면 빈 배열에 아규먼트를 푸쉬하는 함수를 만들어준다.
- pop라는 함수를 실행하면 배열에서 첫번째 element를 pop하는 함수를 만들어준다.
- peek이라는 함수를 실행하면 배열의 길이 -1 의 index에 위치하는 element를 반환한다.
큐란? (Queue)
- 데이터를 집어넣는 선형 (linear) 자료형이고 FIFO(First in First Out) 라는 특징을 가지고 있다. FIFO는 먼저 집어넣은 데이터가 먼저 나온다는 의미로 음식점에 가서 줄을 서면 먼저 들어가서 다 먹고 먼저 나온다는 느낌으로 이해하면 쉽다.
- 데이터를 집어넣는 작업은 enqueue, 그리고 데이터를 추출하는, 즉 빼내는 작업은 dequeue 라고 한다.
- 순서대로 처리해야 하는 작업을 임시로 저장해두는 버퍼(buffer)로 많이 사용된다.
큐의 Method
- enqueue(): 큐에 요소를 추가한다.
- dequeue(): 큐에 요소를 제거한다.
- peek(): 큐의 가장 앞에 있는 요소를 반환한다.
- isEmpty(): 큐가 비었는지 확인하고 비었으면 true를 반환한다.
- printQueue(): 큐의 모든 요소를 반환한다.
큐의 Pseudocode
-
새로운 클래스를 하나 만들어준다.
-
Constructor 함수로 빈 배열을 만들어 준다.
-
enqueue라는 함수를 실행하면 빈 배열에 아규먼트를 푸쉬하는 함수를 만들어준다.
-
dequeue라는 함수를 실행하면 배열에서 element를 shift하는 함수를 만들어준다.
-
peek라는 함수를 실행하면 배열의 0번째 index의 element를 반환하는 함수를 만들어준다.
-
isEmpty라는 함수를 실행하면 배열의 길이를 재서 0일 경우 true, 다른 값일 경우 false를
반환하는 함수를 만들어준다.
-
printQueue()라는 함수를 실행하면 배열의 모든 요소를 반환하는 함수를 만들어준다.