C언어 연결큐

(C언어 링크드 큐(Linked Queue)에서 넘어옴)

1 개념[ | ]

Linked Queue, 링크드 큐
  • C언어 링크드 큐 구현

2 예시[ | ]

  • 0~3까지 값을 큐에 넣었다가 하나씩 빼며 출력
C
Copy
#include <stdio.h>
#include <stdlib.h>

// node typedef
typedef struct nodeTag { 
    int a; 
	struct nodeTag *next; 
} nodeType;

// queue typedef
typedef struct queteTag {
	nodeType *front;
	nodeType *rear;
	int count;
} queueType;

// createQueue
void createQueue(queueType **queue)
{
	*queue = (queueType *)malloc(sizeof(queueType));
	(*queue)->front = NULL;
	(*queue)->rear = NULL;
	(*queue)->count = 0;
}

// createNode
nodeType *createNode(int a)
{
	nodeType *node;

	node = (nodeType *)malloc(sizeof(nodeType));
	node->a = a;
	node->next = NULL;

	return node;
}

// enQueue
void enQueue(queueType *queue, nodeType *node)
{
	if (queue->front == NULL) {
		queue->front = node;
		queue->rear = node;
	}
	else {
		queue->rear->next = node;
		queue->rear = node;
	}
	queue->count++;
}

// deQueue
nodeType *deQueue(queueType *queue)
{
	nodeType *node;

	node = queue->front;
	
	if (queue->front->next == NULL) {
		queue->front = NULL;
		queue->rear = NULL;
	}
	else {
		queue->front = queue->front->next;
	}
	queue->count--;

	return node;
}

// destroyNode
void destroyNode(nodeType *node)
{
	free(node);
}

// isEmpty
int isEmpty(queueType *queue)
{
	if (queue->count == 0)
		return 1;
	else
		return 0;
}

// destroyQueue
void destroyQueue(queueType *queue)
{
	nodeType *node;

	while (!isEmpty(queue)) {
		node = deQueue(queue);
		destroyNode(node);
	};
	free(queue);
}

int main()
{
	queueType *queue;
	nodeType *node;

	createQueue(&queue);

	enQueue(queue, createNode(0));
	enQueue(queue, createNode(1));
	enQueue(queue, createNode(2));
    enQueue(queue, createNode(3));
	
	while(!isEmpty(queue)) {
		node = deQueue(queue);
		printf("%d\n", node->a);
		destroyNode(node);
	}
	destroyQueue(queue);
}

3 같이 보기[ | ]

편집자 John Jeong J Jmnote Jmnote bot
  • C, C++ 주석
    C에도 적용되는 주석 문법이라면, "C와 C++ 주석"으로 제목을 옮기면 어떨까요? Ykhwong
  • C, C++ 주석
    @Ykhwong 네네. 좋은 의견 입니다. 변경 부탁드려요. John Jeong
  • C, C++ 주석
    'C스타일 주석'이라는 제목도 괜찮겠네요.J Jmnote
  • C, C++ 주석
    'C, C++ 주석' 형태로 최종 가도록 하겠습니다. C와 C++ 까지의 현재 범위를 명확히 하려 합니다. John Jeong
  • C언어 연결리스트 구현
    마지막에 메모리 해지는 어떤식으로 해야되나요?? 돌멩이
  • C언어 연결리스트 구현
    @돌맹이 head 가 널까지 가는거 보시고 코드가 아름 답진 않지만 대략 아래 방법처럼 하나씩 삭제 하시면 될 것 같습니다. void deleteNode(nodeType *head) { nodeType *ptr = head, *ptr2 = NULL; while(ptr- John Jeong
  • C언어 연결리스트 구현
    답변 감사합니다! 돌멩이