반응형
[C언어]45일차 - 링크드 큐 PPT 정리










구현코드
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#define ElementType int
typedef struct _Node{
char* data;
struct _Node* next;
} Node;
typedef struct _LinkedQueue{
Node* Front;
Node* Rear;
int count;
} LinkedQueue;
void createQueue(LinkedQueue** queue);
void destroyQueue(LinkedQueue* queue);
Node* createNode(char* data);
void destroyNode(Node* _node);
void enQueue(LinkedQueue* queue , Node* newNode);
Node* deQueue(LinkedQueue* queue);
int isEmpty(LinkedQueue* queue);
//MARK: 큐생성
void createQueue(LinkedQueue** queue){
(*queue) = (LinkedQueue*)malloc(sizeof(LinkedQueue));
(*queue)->Front = NULL;
(*queue)->Rear = NULL;
(*queue)->count = 0;
}
//MARK: 큐 소멸
void destroyQueue(LinkedQueue* queue){
Node* current = queue->Front;
Node* nextNode = NULL;
while (current != NULL) {
nextNode = current->next;
destroyNode(current);
current = nextNode;
}
queue->Front = NULL;
queue->Rear = NULL;
queue->count = 0;
free(queue);
}
//MARK: 노드 소멸
void destroyNode(Node* _node){
if (_node == NULL) {
return;
}
if (_node->data != NULL) {
free(_node->data);
_node->data = NULL;
}
free(_node);
}
//MARK: 노드 생성
Node* createNode(char* data){
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) { printf("Node 생성 실패\n"); return NULL; }
newNode->data = (char*)malloc(strlen(data) + 1);
strcpy(newNode->data, data);
newNode->next = NULL;
return newNode;
}
//MARK: enQueue
void enQueue(LinkedQueue* queue , Node* newNode){
//rear를 컨트롤한다.
if (queue->Front == NULL) {
queue->Front = newNode;
queue->Rear = newNode;
printf("큐가 비었기 때문에 Front에 할당\n");
}else{
queue->Rear->next = newNode;
queue->Rear = newNode;
printf("큐가 안 비었기 때문에 Rear에 할당\n");
}
queue->count++;
}
//MARK: deQueue
Node* deQueue(LinkedQueue* queue){
//front를 컨트롤 한다.
Node* Front = queue->Front;
if (queue->Front->next == NULL) {
queue->Front = NULL;
queue->Rear = NULL;
}else{
queue->Front = queue->Front->next;
}
queue->count--;
return Front;
}
//MARK: 비었는지 체크
int isEmpty(LinkedQueue* queue){
return queue->count == 0;
}
//MARK: main
int main(int argc, const char * argv[]) {
LinkedQueue* myqueue = NULL;
createQueue(&myqueue);
enQueue(myqueue, createNode("a"));
enQueue(myqueue, createNode("b"));
enQueue(myqueue, createNode("c"));
printf("%s \n" , deQueue(myqueue)->data);
printf("%s \n" , deQueue(myqueue)->data);
printf("%s \n" , deQueue(myqueue)->data);
return 0;
}반응형
'컴퓨터 기초 > C언어' 카테고리의 다른 글
| [C언어]46일차 - 2진트리 (이것이 c언어 자료구조 알고리즘이다) (0) | 2025.11.17 |
|---|---|
| [C언어]46일차 - 트리 (이것이 c언어 자료구조 알고리즘이다) (0) | 2025.11.14 |
| [C언어]44일차 - 순환큐 PPT 정리 (0) | 2025.11.13 |
| [C언어]44일차 - 순환큐 (이것이 C언어 자료구조&알고리즘) (0) | 2025.11.12 |
| [C언어]43일차 - 스택 - 링크드 리스트 PPT 정리 (0) | 2025.11.12 |