front와 rear을 이용하여 링크드 리스트를 큐처럼 사용.


[AddQ]

01234


[DeleteQ]

012


[소스코드]

#define TRUE 1
#define FALSE 0;

typedef struct {
	int data;
} element;

typedef struct _queue_node queue_node;

struct _queue_node {
	element item;
	queue_node* link;
};

queue_node* front = NULL;
queue_node* rear;

int is_empty()
{
	if(front == NULL) {
		return TRUE;
	}

	return FALSE;
}

void addq(element item) {
	queue_node* ptr;

	ptr = (queue_node*)malloc(sizeof(queue_node));

	ptr->item = item;
	ptr->link = NULL;

	if(front == NULL) {
		front = ptr;
		rear = ptr;
	}

	else {
		rear->link = ptr;
		rear = ptr;
	}
}

element deleteq() {
	queue_node* ptr;
	element item;

	if(is_empty()) {
		printf("Queue is Empty!\n");
		exit(1);
	}

	ptr = front;
	front = front->link;

	item = ptr->item;
	free(ptr);

	return item;
}

int main() {
	int i;

	for(i=0; i<10; i++) {
		element item;
		item.data = i;
		addq(item);
		printf("AddQ: %d\n", i);
	}

	for(i=0; i<10; i++) {
		element item = deleteq();
		printf("DeleteQ: %d\n", item.data);
	}

	return 0;
}


[결과]


'Develop' 카테고리의 다른 글

이진 트리_전위 순회(Preorder Traversal)  (0) 2014.02.11
이진 트리(Binary Tree)  (0) 2014.02.11
링크드 스택(Linked Stack)  (0) 2014.02.11
원형 큐(Circular Queue)  (0) 2014.02.10
큐(Queue)  (0) 2014.02.09

+ Recent posts