queue 다른버전
#include <stdio.h>
#include <stdlib.h>
#define EMPTY NULL
#define END 0
typedef struct node{
int data;
struct node* link;
}Queue;
//Func
Queue* get_node();
void enqueue(Queue** fro, Queue** rea, int n);
int dequeue(Queue** fro, Queue** rea);
void Printf(Queue** fro);
int main(void) {
Queue* front = EMPTY;
Queue* rear = EMPTY;
enqueue(&front, &rear, 10);
enqueue(&front, &rear, 20);
enqueue(&front, &rear, 30);
enqueue(&front, &rear, 40);
enqueue(&front, &rear, 50);
enqueue(&front, &rear, 60);
enqueue(&front, &rear, 70);
enqueue(&front, &rear, 80);
Printf(&front);
printf("remove data [%d]\n", dequeue(&front, &rear));
Printf(&front);
printf("remove data [%d]\n", dequeue(&front, &rear));
Printf(&front);
return 0;
}
Queue* get_node() {
Queue* tmp = NULL;
tmp = (Queue*)malloc(sizeof(Queue));
if(tmp == EMPTY) {
printf("fail \n");
return END;
} else { // tmp != EMPTY
tmp->link = EMPTY;
return tmp;
}
}
void enqueue(Queue** fro, Queue** rea, int n) {
Queue* tmp = EMPTY;
if(*fro == EMPTY) {
*fro = get_node(); //0X10
(*fro)->data = n; //10
*rea = *fro;
} else { // *fro != EMPTY
tmp = get_node();
if(tmp == 0) {
return;//END
} else { // tmp != 0
tmp->data = n;
(*rea)->link = tmp;
(*rea) = tmp;
}
}
}
int dequeue(Queue** fro, Queue** rea) {
Queue* remove_node = EMPTY;
int remove_data = 0;
if((*fro)->link == EMPTY){
printf("data empty!! \n");
return END;
} else { //(*fro)->link != EMPTY
if((*fro) == (*rea)) {
remove_node = (*fro);
remove_data = remove_node->data;
(*fro) = NULL;
(*rea) = NULL;
free(remove_node);
return remove_data;
} else { // (*fro) != (*rea)
remove_node = (*fro);
remove_data = remove_node->data;
(*fro) = (*fro)->link;
free(remove_node);
return remove_data;
}
}
}
void Printf(Queue** fro) {
Queue* index_node = NULL;
if((*fro) == NULL) {
printf("data is empty");
return;
} else {//(*fro) != NULL
index_node = (*fro);
printf("[front] ");
while(index_node->link != NULL) {
printf("%d ", index_node->data);
index_node = index_node->link;
}
printf("[rear]\n");
}
}
'언어 > c언어' 카테고리의 다른 글
피보나치 수열 (0) | 2016.04.14 |
---|---|
작업중 (double linked circle) (0) | 2016.03.06 |
c언어 행렬 구현 (0) | 2016.02.25 |
double linked (0) | 2016.02.23 |
QUEUE (0) | 2016.02.22 |