자료구조_c언어_큐스택_queueStack_01

2021. 5. 17. 16:08개발하는중/자료구조

728x90
반응형
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <stdio.h>
#include <stdlib.h>
#define Q_SIZE 100
 
typedef char element;
typedef struct {
    element queue[Q_SIZE];
    int front, rear;
}QueueType;
 
QueueType* createQueue() {
    QueueType *Q;
    Q = (QueueType*)malloc(sizeof(QueueType));
    Q->front = -1;
    Q->rear = -1;
    return Q;
}
 
int isEmpty(QueueType *Q) {
    if (Q->front == Q->rear) {
        printf("\nQueue is empty!\n");
        return 1;
    }
    else {
        return 0;
    }
}
 
int isFull(QueueType *Q) {
    if (Q->rear == Q_SIZE - 1) {
        printf("\nQueue is full!\n");
        return 1;
    }
    else {
        return 0;
    }
}
 
void enQueue(QueueType *Q, element item) {
    if (isFull(Q)) {
        exit(1);
    }
    else {
        Q->rear++;                        // rear +1 이동
        Q->queue[Q->rear] = item;        // Q->queue배열에 item데이터 를 넣는다. 배열이라 데이터 입력떄마다 증가해야기떄문에 Q->rear 을 넣어줌
    }
}
 
element deQueue(QueueType *Q) {
    if (isEmpty(Q)) {
        exit(1);
    }
    else {
        Q->front++;                        // front +1 이동
        return Q->queue[Q->front];
    }
}
 
void del(QueueType *Q) {
    if (isEmpty(Q)) {
        exit(1);
    }
    else {
        Q->front++;            // del은 꺼내지 않고 그냥 pass한다. 해당 데이터 그냥 지나친다고 보면됨
    }
}
 
element peek(QueueType *Q) {
    if (isEmpty(Q)) {
        exit(1);
    }
    else {
        return Q->queue[Q->front + 1];
    }
}
 
void printQ(QueueType *Q) {
    int i;
    printf("Queue :[");
    for (i = Q->front+1; i <= Q->rear; i++) {    // front출력담당 front는 -1부터나 비어있는칸에 있기떄문에 +1해주고
        printf("%3c", Q->queue[i]);                // 데이터가 하나만 있다고 가정하에 front를+1 해서 0번배열에 가지만 
    }                                            // rear도 0번배열 이기때문에 <= 부호사용해준다.
    printf("]\n");
}
 
int main() {
    QueueType *Q1 = createQueue();
    element data;
    printf("insert_A>>");
    enQueue(Q1, 'A');
    printQ(Q1);
    printf("insert_B>>");
    enQueue(Q1, 'B');
    printQ(Q1);
 
    printf("delete>>");
    deQueue(Q1);
    printQ(Q1);
 
    printf("insert_C>>");
    enQueue(Q1, 'C');
    printQ(Q1);
 
    data = peek(Q1);
    printf("peek item:%c\n", data);
 
    printf("delete>>");
    deQueue(Q1);
    printQ(Q1);
    printf("delete>>");
    deQueue(Q1);
    printQ(Q1);
 
    getchar();
 
    return 0;
 
}
cs
728x90