/* FIFO 데이터 크기 가변 */
/* queue4.c */
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 | #include <stdio.h> #include <stdlib.h> #include "queue4.h" void insert(Queue *ps, int data) { if(ps->rear == ps->size) { fprintf(stderr, "queue is full. \n"); exit(-1); } ps->queue[ps->rear] = data; ++ps->rear; } int delete(Queue *ps) { if(ps->front == ps->rear) { fprintf(stderr, "queue is empty. \n"); exit(-2); } return ps->queue[ps->front++]; } void initStack(Queue *ps, size_t size) { ps->size = size; ps->front = 0; ps->rear = 0; ps->queue = (int*)malloc(sizeof(int)*size); } void cleanupStack(Queue *ps) { free(ps->queue); ps->queue=NULL; } |
/* testqueue4.c */
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 | #include <stdio.h> #include "queue4.h" int main(void) { Queue q1, q2; initStack(&q1, 10); initStack(&q2, 20); insert(&q1, 100); insert(&q1, 200); insert(&q1, 300); insert(&q2, 700); insert(&q2, 800); insert(&q2, 900); printf("q1 1st deleteQ : %d\n", delete(&q1)); printf("q1 2st deleteQ : %d\n", delete(&q1)); printf("q1 3st deleteQ : %d\n", delete(&q1)); printf("q2 1st deleteQ : %d\n", delete(&q2)); printf("q2 2st deleteQ : %d\n", delete(&q2)); printf("q2 3st deleteQ : %d\n", delete(&q2)); cleanupStack(&q1); cleanupStack(&q2); return 0; } |
/* queue4.h */
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #ifndef QUEUE4_H #define QUEUE4_H typedef struct{ int *queue; size_t size; int front; int rear; } Queue; void insert(Queue *ps, int data); int delete(Queue *ps); void initStack(Queue *ps, size_t size); void cleanupStack(Queue *ps); #endif |
'Study > 리눅스' 카테고리의 다른 글
| 리눅스 C언어로 컴파일하기 Bowling (1) (0) | 2014.09.17 |
|---|---|
| 리눅스 C언어로 컴파일하기 FIFO (5) (0) | 2014.09.12 |
| 리눅스 C언어로 컴파일하기 FIFO (3) (0) | 2014.09.12 |
| 리눅스 C언어로 컴파일하기 FIFO (2) (0) | 2014.09.12 |
| 리눅스 C언어로 컴파일하기 FIFO (1) (0) | 2014.09.12 |
