본문 바로가기
컴퓨터 기초/C언어

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

by 럭키길버트 2025. 11. 14.
반응형

[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;
}
반응형