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
- 209번
- 2503번
- C++
- 2293번
- 1120번
- LeetCode
- 1004번
- 최소힙
- 그리디
- 트리 구현
- 백준
- 1029번
- 자료구조
- 7569번
- 1748번
- 스택
- 1918번
- LIS
- 배열
- 구현
- 수 이어쓰기 1
- 1874번
- 3086번
- 릿코드
- 투포인터
- 2565번
- 2504번
- 1931번
- 11053번
- 1759번
Archives
- Today
- Total
Hello World!
[자료구조] queue 본문
queue
1. queue
queue(큐)는 출구와 입구가 양쪽에 각각 있는 선형 자료구조이다.
즉, front에 데이터를 삽입하면 rear에서 빠져나온다.
이는 큐의 FIFO(First In First Out) 성질을 보장해주는데 먼저 들어간 데이터가 먼저 나온다는 뜻이다.
큐의 구조는 아래 그림과 같다.
이제 그림을 통해 삽입 과정을 이해해보자.
int형 데이터를 담는 큐에 5, 4, 2, 1을 순서대로 push해보자.
제일 먼저 들어간 5가 rear, 제일 마지막에 들어간 1이 front에 위치하고 있다.
그렇다면 처음 삭제 연산이 수행됐을 때 삭제되는 원소는 무엇일까?
rear에 위치하는, 즉 가장 먼저 들어온 5이다.
만약 삭제 연산이 2번 연속 수행된다면 5와 4가 차례로 삭제되고, 큐는 아래 그림과 같은 모습을 하고 있을 것이다.
앞서 스택은 연결 리스트를 통해 구현했으므로 큐는 배열을 통해 구현했다.
class Queue {
public:
int *Q;
int capacity;
int n;
int f, r;
Queue(int capacity) {
this->capacity = capacity;
this->f = 0;
this->r = 0;
this->Q = new int[capacity];
this->n = 0;
}
void push(int x) {
if (n < capacity) {
if (f == 0&&n==0) {
Q[0] = x;
}
else {
r += 1;
Q[r] = x;
}
n++;
}
else
return;
}
int pop() {
if (n != 0) {
int item = Q[f];
f += 1;
n--;
return item;
}
else
return -1;
}
int size() {
return n;
}
int empty() {
if (n == 0)
return 1;
else
return 0;
}
int front() {
if (n == 0)
return -1;
else {
int item = Q[f];
return item;
}
}
int back() {
if (n == 0)
return -1;
else {
int item = Q[r];
return item;
}
}
};
'자료구조' 카테고리의 다른 글
[자료구조] 힙과 우선순위 큐(Heap and Priority Queue) (0) | 2020.11.05 |
---|---|
[자료구조] Tree: 순회 (0) | 2020.11.02 |
[자료구조] Tree: 정의 및 depth와 height 구하기 (0) | 2020.11.01 |
[자료구조] Array and Linked List (0) | 2020.11.01 |
[자료구조] stack (0) | 2020.05.02 |
Comments