Next:
Stack
, Previous:
Selection sort & Insertion sort
, Up:
Index
Queue
큐
큐(Queue)는 뒤쪽으로 들어가서 앞쪽으로 나오는 자료 구조(Data Structure)이다.
스케줄링, 탐색 알고리즘 등에서 다방면으로 사용
PUSH: 큐에 데이터를 넣습니다.
POP: 큐에서 데이터를 빼냅니다.
배열을 이요한 큐
#include
<stdio.h>
#include
<stdlib.h>
#define
SIZE 10000
#define
INF 99999999
int
queue
[
SIZE
]
;
int
front
=
0
;
int
rear
=
0
;
void
push
(
int
data
)
{
if
(
rear
>=
SIZE
)
{
printf
(
큐
오
버
플
로
우
가
발
생
했
습
니
다
.
\
n
"
);
return
;
}
queue
[
rear
++
]
=
data
;
}
int
pop
(
)
{
if
(
front
==
rear
)
{
printf
(
"
큐
언
더
플
로
우
가
발
생
했
습
니
다
.
"
)
;
return
-
INF
;
}
return
queue
[
front
++
]
;
}
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
(
)
system
(
"
pause
"
)
;
return
0
;
}
연결 리스트를 이용한 큐
#include
<stdio.h>
#include
<stdlib.h>
#define
INF 99999999
typedef
struct
{
int
data
;
struct
Node
*
next
;
}
Node
;
typedef
struct
{
Node
*
front
;
Node
*
rear
;
int
count
;
}
Queue
;
void
push
(
Queue
*
queue
,
int
data
)
{
Node
*
node
=
(
Node
*
)
malloc
(
sizeof
(
Node
))
;
node
->
data
=
data
;
node
->
next
=
NULL
;
if
(
queue
->
count
==
0
)
{
queue
->
front
=
node
;
}
else
{
queue
->
rear
->
next
=
node
;
}
queue
->
rear
=
node
;
queue
->
count
++
;
}
int
pop
(
Queue
*
queue
)
{
if
(
queue
->
count
==
0
)
{
printf
(
"
큐
언
더
플
로
우
가
발
생
했
습
니
다
.
\n
"
)
;
return
-
INF
;
}
Node
*
node
=
queue
->
front
;
int
data
=
node
->
data
;
queue
->
front
=
node
->
next
;
free
(
node
)
;
queue
->
count
--
;
return
data
;
}
void
show
(
Queue
*
queue
)
{
Node
*
cur
=
queue
->
front
;
printf
(
"
---
큐
의
앞
---
\n
"
)
;
while
(
cur
!=
NULL
)
{
printf
(
"
%d\n
"
,
cur
->
data
)
;
cur
=
cur
->
next
;
}
printf
(
"
---
큐
의
뒤
---
\n
"
)
;
}
int
main
(
void
)
{
Queue
queue
;
queue
front
=
queue
.
rear
=
NULL
;
queue
.
count
=
0
;
push
(
&
queue
,
7
)
;
push
(
&
queue
,
5
)
;
push
(
&
queue
,
4
)
;
pop
(
&
queue
)
;
push
(
&
queue
,
6
)
;
pop
(
&
queue
)
;
show
(
&
queue
)
;
system
(
"
pause
"
)
;
return
0
;
}