Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 브라우저
- 연결 리스트
- C
- 웹팩
- 자료구조
- cors
- 자바스크립트
- vue3
- RxJS
- 릿코드
- RT scheduling
- 해시테이블
- 프로세스
- 스택
- 이진탐색
- 포인터
- 알고리즘
- 코딩테스트
- pytorch
- 배열
- 컨테이너
- 연결리스트
- 큐
- 타입스크립트
- GraphQL
- APOLLO
- Machine Learning
- alexnet
- 프론트엔드
- 프로그래머스
Archives
- Today
- Total
프린세스 다이어리
자료구조 큐의 개념과 배열로 구현하는 방법 본문
728x90
1. 큐란 무엇인가
큐(queue)는 뒤쪽으로 들어가서 앞쪽으로 나오는 자료 구조다. 스케줄링, 탐색 알고리즘 등에서 다방면으로 활용된다. 큐는 크게 데이터를 넣는 push, 데이터를 빼내는 pop 함수로 이루어진다. 스택과 마찬가지로 배열을 이용한 구현 방법과 연결 리스트를 이용한 구현 방법으로 나누어진다.
push(7) -> push(5) -> push(4) -> pop() -> push(6) -> pop()
2. 큐를 배열로 구현하기
#include <stdio.h>
#define SIZE 10000
#define INF 99999999
int queue[SIZE];
int front = 0;
int rear = 0;
void push(int data) {
if (rear >= SIZE)
{
printf("큐 오버플로우");
return;
}
queue[rear++] = data;
}
int pop() {
if (front == rear)
{
printf("큐 언더플로우");
return -INF;
}
return queue[front++];
}
먼저 큐의 사이즈를 10,000으로 미리 정하고, INF라는 변수를 임의의 무한대 수로 지정한다. front, rear는 각각 앞 인덱스, 뒤 인덱스로 처음에 모두 0이다.
push() 함수는 매개변수로 정수형을 받아 rear에 1을 더한 위치에 데이터를 넣는다. 큐는 뒤에서부터 들어오기 때문이다. 그리고 원소의 개수가 앞서 지정한 사이즈 10,000을 넘기면 큐 오버플로우를 표시해준다. pop() 함수는 front에 해당하는 값을 꺼낸 다음 1을 더한다. front와 rear가 같으면 꺼낼 큐가 없기 또 반환 값은 반드시 존재해야 하기 때문에 마이너스 무한대를 리턴해서 오류가 있음을 함수를 호출한 곳에 알려준다.
void show() {
printf("큐의 처음\n");
for (int i = front; i < rear; i++)
{
printf("%d\n", queue[i]);
}
printf("큐의 끝\n");
}
int main(void)
{
push(7);
push(5);
push(4);
pop();
push(6);
pop();
show();
}
큐의 처음
4
6
큐의 끝
push, pop 함수 임의로 실행 후 큐에 남은 원소들을 차례로 리턴하는 show() 함수를 만들어 출력해보면 앞에서 제시한 그림과 같은 결과가 나온다.
728x90
'자료구조, 알고리즘' 카테고리의 다른 글
자바스크립트로 연결 리스트(Linked List) 구현하기 (0) | 2021.10.26 |
---|---|
[프로그래머스] 프린터 대기목록 순서 구하기 문제 - 자바스크립트 (0) | 2021.10.24 |
[프로그래머스] 프로그래머스 팀의 기능개발하기 문제 - 자바스크립트로 구현 (0) | 2021.10.23 |
C로 스택을 활용한 계산기 구현해보기 (중위 표기법, 후위 표기법 뜻) (1) | 2021.10.19 |
스택 자료구조 연결 리스트를 이용하는 방법 C로 구현하기 (0) | 2021.10.18 |
Comments