티스토리 뷰

Coding/dataStucture

Queue.c

이끼대백과 2018. 4. 17. 17:52

스택에 이어 큐 포스팅입니다. 스택같은 경우에는 먼저들어간 노드가 가장 마지막에 나왔다면(후입선출) 큐같은 경우는 먼저 들어간 노드가 가장 먼저 나옵니다(선입선출).

밑에는 동적할당으로 구현한 큐입니다.


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <stdio.h>
#include <stdlib.h>
 
typedef int element;
typedef struct node {
    element data;
    struct node* link;
}Node;//노드 구조체
 
typedef struct queue {
    Node* head;
    Node* tail;
}Queue;//head포인터용 주머니
 
void initQueue(Queue* q) {//초기화
    q->head = NULL;
    q->tail = NULL;
}
 
void enQueue(Queue* q, element data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    if (!newNode) exit(1);//메모리 할당 실패시
    newNode->data = data;
    newNode->link = NULL;
    if (q->head == NULL) {//빈 리스트라면
        q->head = newNode;//head와 tail에 바로연결
        q->tail = newNode;
    }
    else {//리스트의 내용이 있다면 끝에 연결
        q->tail->link = newNode;
        q->tail = newNode;
    }
}
 
void deQueue(Queue* q) {
    if (q->head) {//데이터가 있다면
        Node* head = q->head;
        q->head = head->link;//다음 노드 연결
        free(head);//삭제
if (q->head == NULL) {
q->tail = NULL;
    }
}
 
element front(Queue q) {
    return q.head->data;
}
 
int isEmpty(Queue q) {
    if (q.head) return 0;
    else return 1;
}
 
int main(void) {
    Queue q;
    initQueue(&q);
    enQueue(&q, 10);
    enQueue(&q, 20);
    enQueue(&q, 30);
    while (!isEmpty(q)) {
        printf("%d\n"front(q));
        deQueue(&q);
    }
 
    return 0;
}

cs


'Coding > dataStucture' 카테고리의 다른 글

스택의 응용(후위 표기법)  (3) 2018.05.10
LinkedList.h/LinkedList.c  (2) 2018.04.27
스택의 응용(괄호검사).c  (0) 2018.02.23
Stack.c  (0) 2018.02.23
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2025/01   »
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
글 보관함