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

2022-07-09 01:55:12
조회수 265

컴공 일기116

게시글 주소: https://orbi.kr/00057492193


링크드 리스트 기반 주소록 구현을 또 해봤습니다. 약 한 시간 정도 걸린 듯 하네요 ㅎㅎ

가장 핵심적인 부분만 구현해봤어요. 출력이야 반복문 while 하나 돌리면 되는 거니까 그런 건 빼두고,

추가 및 탐색, 초기화 로직만 짜보았습니다.  



#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define SIZE 30


typedef struct USERDATA

{

    char Name[SIZE];

    char Phone[SIZE];

    struct USERDATA* NextNode;

}Node;


int PrintUI()

{

    int choice = 0;

    printf("링크드 리스트 기반 주소록 메뉴\n");

    printf("-----------------------\n");

    printf("1. 초기화\n");

    printf("2. 신규 데이터 추가\n");

    printf("3. 데이터 탐색\n");

    printf("4. 종료\n");

    printf("-----------------------\n");

    scanf("%d", &choice);

    return choice;

    

}


void Destroy_ALL_List(Node** List, Node** Next)

{

    Node* pNode;

    pNode = *List;


    while (pNode != NULL)

    {

        *Next = pNode->NextNode;

        free(pNode);

        pNode = *Next;

    }


    printf("초기화 완료!");

}



void Add(Node** List, Node** Prev)

{

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

    printf("이름 :");

    gets(pNode->Name);

    printf("번호 :");

    gets(pNode->Phone);


    if (*List == NULL)

    {

        *List = pNode;

    }

    else

    {

        (*Prev)->NextNode = pNode;

    }

    pNode->NextNode = NULL;

    *Prev = pNode;

}


void Search(Node** List, Node** Next)

{

    Node* pNode;

    char Search[SIZE];

    printf("찾을 이름을 입력하세요: ");

    gets(Search);

    pNode = *List;

    while (pNode != NULL)

    {

        *Next = pNode->NextNode;

        if (strcmp(pNode->Name, Search) == 0)

        {

            printf("전화 번호는 %s 입니다.\n", pNode->Phone);

            break;

        }

        

        else

            printf("해당 이름이 등록되어 있지 않습니다.\n");

        

        pNode = *Next;

    }


}


void exit1(Node** List, Node** Next)

{

    Node* pNode;

    pNode = *List;

    while (pNode != NULL)

    {

        *Next = pNode->NextNode;

        free(pNode);

        pNode = *Next;

    }

}


int main()

{

    Node* List = NULL;

    Node* Prev = NULL;

    Node* Next = NULL;


    int menu = 0;


    while ((menu = PrintUI()) != 4)

    {

        getchar();

        if (menu == 1)

        {

            Destroy_ALL_List(&List, &Next);

        }

        else if (menu == 2)

        {

            Add(&List, &Prev);

        }

        else if (menu == 3)

        {

            Search(&List, &Next);

        }

    }


    exit1(&List, &Next);

    

    return 0;

}

0 XDK (+0)

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