티스토리 뷰
스택에 이어 큐 포스팅입니다. 스택같은 경우에는 먼저들어간 노드가 가장 마지막에 나왔다면(후입선출) 큐같은 경우는 먼저 들어간 노드가 가장 먼저 나옵니다(선입선출).
밑에는 동적할당으로 구현한 큐입니다.
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; } |
'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 |