내 소식

✨컴공주✨ [1052682] · MS 2021 · 쪽지

2022-06-27 11:37:24
조회수 214

컴공 일기92

게시글 주소: https://dev.orbi.kr/00057341390

단방향 리스트 구현 예제입니다.



#include <stdio.h>

#include <stdlib.h>


struct Node

{

    int Data;

    struct Node* NextNode;


    //단방향 연결 리스트

};


//노드 생성

Node* SLL_CreateNode(int NewData)

{

    Node* NewNode = (Node*)malloc(sizeof(Node));

    


    NewNode->Data = NewData;

    NewNode->NextNode = NULL;


    return NewNode;

}


//노드 메모리 해제

void SLL_DestroyNode(Node* Node)

{

    free(Node);

}


//노드 추가

void SLL_AppendNode(Node** Head, Node* NewNode)

{

    if ((*Head) == NULL)

    {

        *Head = NewNode;

    }

    else

    {

        Node* Tail = *Head;

        while (Tail->NextNode != NULL)

        {

            Tail = Tail->NextNode;

        }


        Tail->NextNode = NewNode;

    }

}


//노드 탐색

Node* SLL_GetNodeAt(Node* Head, int Location)

{

    

    Node* Current = Head;


    while (Current != NULL && (--Location) >= 0)

    {

        Current = Current->NextNode;

    }


    return Current;

}


//노드 삭제

void SLL_RemoveNode(Node** Head, Node* Remove)

{

    if (*Head == Remove)

    {

        *Head = Remove->NextNode;

    }


    else {

        Node* Current = *Head;

        while (Current != NULL && Current->NextNode != Remove)

        {

            Current = Current->NextNode;

        }


        if (Current != NULL)

            Current->NextNode = Remove->NextNode;

    }


     

}


//노드 정방향 삽입

void SLL_InsertAfter(Node* Current, Node* NewNode)

{

    NewNode->NextNode = Current->NextNode;

    Current->NextNode = NewNode;

}


//헤드 노드 정방향 삽입

void SLL_InsertNewHead(Node** Head, Node* NewHead)

{

    if (*Head == NULL)

    {

        (*Head) = NewHead;

    }


    else

    {

        NewHead->NextNode = (*Head);

        (*Head) = NewHead;

    }

}


//노드 개수 세기

int SLL_GetNodeCount(Node* Head)

{

    int Count = 0;

    Node* Current = Head;


    while (Current != NULL)

    {

        Current = Current->NextNode;

        Count++;

    }


    return Count;

}


int main()

{

    int i = 0;

    int Count = 0;

    Node* List = NULL;

    Node* Current = NULL;

    Node* NewNode = NULL;


    for (i = 0; i < 5; i++)

    {

        NewNode = SLL_CreateNode(i);

        SLL_AppendNode(&List, NewNode);

    }


    NewNode = SLL_CreateNode(-1);

    SLL_InsertNewHead(&List, NewNode);


    NewNode = SLL_CreateNode(-2);

    SLL_InsertNewHead(&List, NewNode);


    Count = SLL_GetNodeCount(List);

    for (i = 0; i < Count; i++)

    {

        Current = SLL_GetNodeAt(List, i);

        printf("List[%d] : %d\n", i, Current->Data);

    }

}


실행결과 :


List[0] : -2

List[1] : -1

List[2] : 0

List[3] : 1

List[4] : 2

List[5] : 3

List[6] : 4


rare-백예린입니다

0 XDK (+0)

  1. 유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.

✨컴공주✨ [1052682]

쪽지 보내기