<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://www.gaonwiki.com/w/index.php?action=history&amp;feed=atom&amp;title=%ED%81%90%28%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%29</id>
	<title>큐(프로그래밍) - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="https://www.gaonwiki.com/w/index.php?action=history&amp;feed=atom&amp;title=%ED%81%90%28%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%29"/>
	<link rel="alternate" type="text/html" href="https://www.gaonwiki.com/w/index.php?title=%ED%81%90(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D)&amp;action=history"/>
	<updated>2026-07-07T21:11:27Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://www.gaonwiki.com/w/index.php?title=%ED%81%90(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D)&amp;diff=107662&amp;oldid=prev</id>
		<title>Gaon12: 시작</title>
		<link rel="alternate" type="text/html" href="https://www.gaonwiki.com/w/index.php?title=%ED%81%90(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D)&amp;diff=107662&amp;oldid=prev"/>
		<updated>2024-10-14T02:24:41Z</updated>

		<summary type="html">&lt;p&gt;시작&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 개요 ==&lt;br /&gt;
큐(Queue)는 컴퓨터 과학에서 널리 사용되는 추상 자료형으로, 데이터를 순서대로 저장하고 관리하는 자료 구조이다. 큐의 가장 큰 특징은 &amp;#039;선입선출&amp;#039;(FIFO: First In First Out) 원칙을 따른다는 점이다. 이는 가장 먼저 들어온 데이터가 가장 먼저 나가는 구조를 의미한다.&lt;br /&gt;
&lt;br /&gt;
== FIFO vs LIFO ==&lt;br /&gt;
데이터 구조를 이해하는 데 있어 FIFO와 LIFO의 개념은 매우 중요합니다.&lt;br /&gt;
&lt;br /&gt;
=== FIFO (First In First Out) ===&lt;br /&gt;
* FIFO는 &amp;#039;&amp;#039;&amp;#039;&amp;quot;먼저 들어온 것이 먼저 나간다&amp;quot;&amp;#039;&amp;#039;&amp;#039;는 원칙이다.&lt;br /&gt;
* 큐(Queue)가 대표적인 FIFO 구조다.&lt;br /&gt;
* 실생활의 예: 계산대에 줄 서 있는 사람들, 프린터의 인쇄 대기열&lt;br /&gt;
&lt;br /&gt;
=== LIFO (Last In First Out) ===&lt;br /&gt;
자세한 내용은 [[스택(프로그래밍)]] 문서를 참고하세요!&lt;br /&gt;
&lt;br /&gt;
* LIFO는 &amp;#039;&amp;#039;&amp;#039;&amp;quot;나중에 들어온 것이 먼저 나간다&amp;quot;&amp;#039;&amp;#039;&amp;#039;는 원칙이다.&lt;br /&gt;
* 스택(Stack)이 대표적인 LIFO 구조다.&lt;br /&gt;
* 실생활의 예: 접시 쌓기, 웹 브라우저의 뒤로 가기 버튼&lt;br /&gt;
&lt;br /&gt;
== 큐(Queue)의 특징 ==&lt;br /&gt;
# FIFO 원칙: 가장 먼저 들어온 데이터가 가장 먼저 나간다.&lt;br /&gt;
# 주요 작업:&lt;br /&gt;
## Enqueue: 큐의 뒤쪽(rear)에 새로운 요소를 추가한다.&lt;br /&gt;
## Dequeue: 큐의 앞쪽(front)에서 요소를 제거한다.&lt;br /&gt;
# 주요 위치:&lt;br /&gt;
## Front: 큐의 첫 번째 요소 위치&lt;br /&gt;
## Rear: 큐의 마지막 요소 위치&lt;br /&gt;
&lt;br /&gt;
== 큐의 기본 연산 ==&lt;br /&gt;
# enqueue(item): 큐의 뒤쪽(rear)에 새로운 요소를 추가한다.&lt;br /&gt;
# dequeue(): 큐의 앞쪽(front)에서 요소를 제거하고 반환한다.&lt;br /&gt;
# front(): 큐의 첫 번째 요소를 반환하지만 제거하지는 않는다.&lt;br /&gt;
# isEmpty(): 큐가 비어있는지 확인한다.&lt;br /&gt;
# isFull(): 큐가 가득 찼는지 확인한다. (배열로 구현된 경우)&lt;br /&gt;
&lt;br /&gt;
== 큐의 구현 방식 ==&lt;br /&gt;
큐는 주로 두 가지 방식으로 구현된다:&lt;br /&gt;
&lt;br /&gt;
=== 1. 배열 기반 구현 ===&lt;br /&gt;
배열을 사용하여 큐를 구현하는 방식이다. &lt;br /&gt;
&lt;br /&gt;
==== 장점 ====&lt;br /&gt;
* 구현이 간단하다.&lt;br /&gt;
* 랜덤 접근이 가능하다.&lt;br /&gt;
&lt;br /&gt;
==== 단점 ====&lt;br /&gt;
* 크기가 고정되어 있어 큐가 가득 찼을 때 새로운 요소를 추가할 수 없다.&lt;br /&gt;
* 큐에서 요소를 제거할 때마다 모든 요소를 앞으로 이동시켜야 할 수 있다.&lt;br /&gt;
&lt;br /&gt;
==== C언어 예제 ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#define MAX_SIZE 100&lt;br /&gt;
&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int items[MAX_SIZE];&lt;br /&gt;
    int front;&lt;br /&gt;
    int rear;&lt;br /&gt;
} Queue;&lt;br /&gt;
&lt;br /&gt;
void initializeQueue(Queue *q) {&lt;br /&gt;
    q-&amp;gt;front = -1;&lt;br /&gt;
    q-&amp;gt;rear = -1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int isEmpty(Queue *q) {&lt;br /&gt;
    return (q-&amp;gt;front == -1 &amp;amp;&amp;amp; q-&amp;gt;rear == -1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int isFull(Queue *q) {&lt;br /&gt;
    return (q-&amp;gt;rear == MAX_SIZE - 1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void enqueue(Queue *q, int value) {&lt;br /&gt;
    if (isFull(q)) {&lt;br /&gt;
        printf(&amp;quot;Queue is full!\n&amp;quot;);&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    if (isEmpty(q)) {&lt;br /&gt;
        q-&amp;gt;front = 0;&lt;br /&gt;
    }&lt;br /&gt;
    q-&amp;gt;rear++;&lt;br /&gt;
    q-&amp;gt;items[q-&amp;gt;rear] = value;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int dequeue(Queue *q) {&lt;br /&gt;
    if (isEmpty(q)) {&lt;br /&gt;
        printf(&amp;quot;Queue is empty!\n&amp;quot;);&lt;br /&gt;
        return -1;&lt;br /&gt;
    }&lt;br /&gt;
    int item = q-&amp;gt;items[q-&amp;gt;front];&lt;br /&gt;
    if (q-&amp;gt;front == q-&amp;gt;rear) {&lt;br /&gt;
        initializeQueue(q);&lt;br /&gt;
    } else {&lt;br /&gt;
        q-&amp;gt;front++;&lt;br /&gt;
    }&lt;br /&gt;
    return item;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    Queue q;&lt;br /&gt;
    initializeQueue(&amp;amp;q);&lt;br /&gt;
&lt;br /&gt;
    enqueue(&amp;amp;q, 10);&lt;br /&gt;
    enqueue(&amp;amp;q, 20);&lt;br /&gt;
    enqueue(&amp;amp;q, 30);&lt;br /&gt;
&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;, dequeue(&amp;amp;q));&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;, dequeue(&amp;amp;q));&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. 연결 리스트 기반 구현 ===&lt;br /&gt;
연결 리스트를 사용하여 큐를 구현하는 방식이다.&lt;br /&gt;
&lt;br /&gt;
==== 장점 ====&lt;br /&gt;
* 크기가 동적으로 조절된다.&lt;br /&gt;
* 요소의 추가와 제거가 효율적이다.&lt;br /&gt;
&lt;br /&gt;
==== 단점 ====&lt;br /&gt;
* 추가적인 메모리가 필요하다. (포인터를 저장해야 하므로)&lt;br /&gt;
* 랜덤 접근이 불가능하다.&lt;br /&gt;
&lt;br /&gt;
==== C언어 예제 ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
typedef struct Node {&lt;br /&gt;
    int data;&lt;br /&gt;
    struct Node* next;&lt;br /&gt;
} Node;&lt;br /&gt;
&lt;br /&gt;
typedef struct {&lt;br /&gt;
    Node* front;&lt;br /&gt;
    Node* rear;&lt;br /&gt;
} Queue;&lt;br /&gt;
&lt;br /&gt;
void initializeQueue(Queue* q) {&lt;br /&gt;
    q-&amp;gt;front = q-&amp;gt;rear = NULL;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int isEmpty(Queue* q) {&lt;br /&gt;
    return (q-&amp;gt;front == NULL);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void enqueue(Queue* q, int value) {&lt;br /&gt;
    Node* newNode = (Node*)malloc(sizeof(Node));&lt;br /&gt;
    newNode-&amp;gt;data = value;&lt;br /&gt;
    newNode-&amp;gt;next = NULL;&lt;br /&gt;
&lt;br /&gt;
    if (isEmpty(q)) {&lt;br /&gt;
        q-&amp;gt;front = q-&amp;gt;rear = newNode;&lt;br /&gt;
    } else {&lt;br /&gt;
        q-&amp;gt;rear-&amp;gt;next = newNode;&lt;br /&gt;
        q-&amp;gt;rear = newNode;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int dequeue(Queue* q) {&lt;br /&gt;
    if (isEmpty(q)) {&lt;br /&gt;
        printf(&amp;quot;Queue is empty!\n&amp;quot;);&lt;br /&gt;
        return -1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    Node* temp = q-&amp;gt;front;&lt;br /&gt;
    int item = temp-&amp;gt;data;&lt;br /&gt;
&lt;br /&gt;
    q-&amp;gt;front = q-&amp;gt;front-&amp;gt;next;&lt;br /&gt;
    free(temp);&lt;br /&gt;
&lt;br /&gt;
    if (q-&amp;gt;front == NULL) {&lt;br /&gt;
        q-&amp;gt;rear = NULL;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return item;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    Queue q;&lt;br /&gt;
    initializeQueue(&amp;amp;q);&lt;br /&gt;
&lt;br /&gt;
    enqueue(&amp;amp;q, 10);&lt;br /&gt;
    enqueue(&amp;amp;q, 20);&lt;br /&gt;
    enqueue(&amp;amp;q, 30);&lt;br /&gt;
&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;, dequeue(&amp;amp;q));&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;, dequeue(&amp;amp;q));&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 큐의 응용 분야 ==&lt;br /&gt;
큐는 다양한 분야에서 활용된다:&lt;br /&gt;
&lt;br /&gt;
# 운영 체제의 작업 스케줄링&lt;br /&gt;
# 네트워크의 데이터 패킷 전송&lt;br /&gt;
# 프린터의 인쇄 작업 대기열&lt;br /&gt;
# 웹 서버의 요청 처리&lt;br /&gt;
# 너비 우선 탐색(BFS) 알고리즘&lt;br /&gt;
# 캐시(Cache) 구현&lt;br /&gt;
&lt;br /&gt;
== 큐의 변형 ==&lt;br /&gt;
# 원형 큐(Circular Queue): 배열의 처음과 끝이 연결된 형태의 큐.&lt;br /&gt;
# 우선순위 큐(Priority Queue): 각 요소에 우선순위가 부여되어 있어, 우선순위가 높은 요소가 먼저 나가는 큐.&lt;br /&gt;
# 데크(Deque, Double-ended Queue): 양쪽 끝에서 삽입과 삭제가 모두 가능한 큐.&lt;br /&gt;
&lt;br /&gt;
== 결론 ==&lt;br /&gt;
큐는 FIFO 원칙을 따르는 간단하면서도 강력한 자료 구조이다. 이 구조는 많은 실제 상황을 모델링하는 데 이상적이며, 컴퓨터 과학의 여러 분야에서 중요한 역할을 한다. 큐의 개념을 이해하고 적절히 활용할 수 있다면, 다양한 프로그래밍 문제를 효과적으로 해결할 수 있을 것이다.&amp;lt;s&amp;gt;악 코딩테스트&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--분류--&amp;gt;&lt;br /&gt;
[[분류:자료구조]] [[분류:알고리즘]] [[분류:컴퓨터 과학]]&lt;/div&gt;</summary>
		<author><name>Gaon12</name></author>
	</entry>
</feed>