#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