Quick actions

cmd+k|ctrl+k

Navigation

Languages

Queue linked list

Snippet info

Language

C

Visibility

public

Author

reddawn12

Created

2017-05-22T04:44:47Z

Updated

2017-05-22T13:41:57Z

#include <stdio.h>
#include <stdlib.h> // malloc함수(동적할당), free함수(동적해제)
#define EMPTY 0
typedef struct node {
	int data;
	struct node* link;
}Queue;

Queue* GetNode() {	//노드를 힙 지역에 만들어주는 함수
	Queue* newNode = (Queue *)malloc(sizeof(Queue));
	newNode->link = EMPTY;
	return newNode;
}
void Enqueue(Queue** front, Queue** rear, int data) {
	Queue* newNode = GetNode();
	newNode->data = data;
	if (*front == EMPTY && *rear == EMPTY)
		(*front) = newNode;
	else
		(**rear).link = newNode;
	(*rear) = newNode;	
}

int Dequeue(Queue** front, Queue** rear) {
	if ((*front == EMPTY && *rear == EMPTY)) {
		printf("Node is nothing!\n");
		return 0;
	}
	int data_tmp = (**front).data;
	Queue* tmp = *front;
	if ((*front) == (*rear))
		(*front) = (*rear) = EMPTY;
	else
		(*front) = (**front).link;
	free(tmp);	
	return data_tmp;
}
/*
int Dequeue(Queue** front, Queue** rear) {
	if ((*front == EMPTY && *rear == EMPTY)) {
		printf("Node is nothing!\n");
		return 0;
	}
	int data_tmp = (**front).data;
	Queue** tmp = (**front).link;
	free(*front);
	if ((*front)==(*rear))
		(*rear) = tmp;
	(*front) = tmp;
	return data_tmp;
}*/
void empty(Queue** front, Queue** rear) {
	while ((*front) != EMPTY || (*rear) != EMPTY) {
		Dequeue(front, rear);
	}
}

void main() {
	// Queue Linked List : FIFO
	//front는 처음 노드의 주소 값(삭제), rear는 마지막 노드의 주소값(추가)
	Queue* front = EMPTY;
	Queue* rear = EMPTY;
	Dequeue(&front, &rear);
	Enqueue(&front, &rear, 10);
	Enqueue(&front, &rear, 20);
	Dequeue(&front, &rear);
	Dequeue(&front, &rear);	
	Dequeue(&front, &rear);
	Enqueue(&front, &rear, 30);
	Enqueue(&front, &rear, 40);
	empty(&front, &rear);
	Dequeue(&front, &rear);	
}
INFO