7.14.2017

자료구조 LinkedQueue

//LinkedQueue.h 헤더 파일 만들기

#ifndef LINKED_QUEUE_H
#define LINKED_QUEUE_H

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct tagNode {
        char* Data;
        struct tagNode * Next;
}Node;

typedef struct tagLinkedQueue{
        Node* Front;
        Node* Rear;
        int Count;
}LinkedQueue;

void CreateQueue(LinkedQueue** Queue);
void DestroyQueue(LinkedQueueQueue);

Node* CreateNode(char* Data);
void DestroyNode(Node* Node);

void Enqueue(LinkedQueueQueueNode* NewNode);
Node* Dequeue(LinkedQueueQueue);

int IsEmpty(LinkedQueueQueue);

#endif

==================================================================================
#include "LinkedQueue.h"


void CreateQueue(LinkedQueue** Queue) {
        (*Queue) = (LinkedQueue*)malloc(sizeof(LinkedQueue));
        (*Queue)->Front = NULL;
        (*Queue)->Rear = NULL;
        (*Queue)->Count = 0;
}

void DestroyQueue(LinkedQueueQueue){
        while (!IsEmpty(Queue)) {
                Node *Popped = Dequeue(Queue);
                DestroyNode(Popped);
        }
        free(Queue);
}

Node* CreateNode(charData) {
        Node* NewNode = (Node*)malloc(sizeof(Node));
        NewNode->Data = (char*)malloc(strlen(Data) + 1);

        strcpy(NewNode->Data, Data);
        NewNode->Next = NULL;
        return NewNode;
}

void DestroyNode(NodeNode) {
        free(Node->Data);
        free(Node);
}

void Enqueue(LinkedQueueQueueNodeNewNode){
        if (Queue->Front == NULL) {
                Queue->Front = NewNode;
                Queue->Rear = NewNode;
        }
        else {
                Queue->Rear->Next = NewNode;
                Queue->Rear = NewNode;
        }
        Queue->Count++;
}

Node* Dequeue(LinkedQueueQueue) {
        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;
}

int IsEmpty(LinkedQueueQueue) {
        return(Queue->Front == NULL);
}


void main(){
        Node* Popped;
        LinkedQueue* Queue;

        CreateQueue(&Queue);

        Enqueue(Queue, CreateNode("abc"));
        Enqueue(Queue, CreateNode("def"));
        Enqueue(Queue, CreateNode("ghi"));
        Enqueue(Queue, CreateNode("jkl"));

        printf("Queue Size : %d\n", Queue->Count);

        while (IsEmpty(Queue) == 0) {
                Popped = Dequeue(Queue);

                printf("Dequeue : %s \n", Popped->Data);

                DestroyNode(Popped);
        }

        DestroyQueue(Queue);
}

댓글 없음:

댓글 쓰기