자료구조 : 원형 연결 리스트 예제문제

ROK·2022년 10월 14일
0

열혈 자료구조

목록 보기
10/30

원형 연결 리스트 예제문제

문제

원형 연결 리스트를기반으로 프로그램을 구현한다.

  • 직원 정보

    • 직원 정보를 등록, 직원 정보는 사번과 이름으로 구성
    • 직원 정보를 담을 수 있는 구조체를 정의
    • 임의로 결정한 직원 정보를 원형 연결 리스트에 저장한다.
    • 직원의 사번은 int
    • 원형 연결 리스트에는 구조체 변수의 주소 값을 저장하는 것으로 원칙으로 한다.
  • 당직

    • 직원은 돌아가면서 당직을 선다
    • 당직 순서는 프로그램 등록 순서를 기준으로 결정
  • 당직 확인

    • 직원의 이름과 하나의 숫자를 이용해 당직자를 확인한다
    • 함수 정의, 직원의 이름, 숫자를 인자로 전달
    • 전달된 이름의 직원이 당직을 선 후, 전달된 숫자에 해당하는 만큼의 날이 지나서 당직을 서게 되는 직원의 정보 반환

직원 헤더파일

#ifndef __EMPLOYEE_H__
#define __EMPLOYEE_H__

#include <string.h>

typedef struct _emp
{
   int emp_num;
   char emp_name[15];
} EMP;

EMP *AddEmployee(int emp_num, const char *emp_name);
void ShowEmployee(EMP *pemp);

#endif

직원 소스파일

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

EMP *AddEmployee(int emp_num, const char *emp_name)
{
   EMP *newEmp = (EMP *)malloc(sizeof(EMP));
   newEmp->emp_num = emp_num;
   strcpy(newEmp->emp_name, emp_name);

   return newEmp;
}

void ShowEmployee(EMP *pemp)
{
   printf("직원 번호 : %d \n", pemp->emp_num);
   printf("직원 이름 : %s \n", pemp->emp_name);
}

메인파일

#include <stdio.h>
#include <stdlib.h>
#include "CLinkedList.h"
#include "Employee.h"

void nextWork(EMP *pemp, List list, const char *name, int day);

int main()
{
   List list;
   EMP *pemp;
   ListInit(&list);
   int i;

   pemp = AddEmployee(11111, "박효신");
   LInsert(&list, pemp);

   pemp = AddEmployee(22222, "나얼");
   LInsert(&list, pemp);

   pemp = AddEmployee(33333, "김동률");
   LInsert(&list, pemp);

   pemp = AddEmployee(44444, "이수");
   LInsert(&list, pemp);

   // 데이터 확인하기
   printf("현재 데이터 수 : %d \n\n", LCount(&list));

   if (LFirst(&list, &pemp))
   {
      ShowEmployee(pemp);
      printf("\n");

      for (i = 0; i < LCount(&list) - 1; i++)
      {
         if (LNext(&list, &pemp))
         {
            ShowEmployee(pemp);
            printf("\n");
         }
      }
   }
   printf("\n");

   nextWork(pemp, list, "박효신", 1);
   nextWork(pemp, list, "나얼", 2);
   nextWork(pemp, list, "김동률", 3);
   nextWork(pemp, list, "이수", 4);

   return 0;
}

void nextWork(EMP *pemp, List list, const char *name, int day)
{
   LFirst(&list, &pemp);

   if (strcmp(pemp->emp_name, name) != 0)
   {
      for (int i = 0; i < LCount(&list) - 1; i++)
      {
         LNext(&list, &pemp);

         if (strcmp(pemp->emp_name, name) == 0)
         {
            break;
         }
      }
   }

   for (int i = 0; i < day; i++)
   {
      LNext(&list, &pemp);
   }

   printf("%s 직원 %d일 후 근무할 직원은 : %s \n", name, day, pemp->emp_name);
}

결과

직원 번호 : 11111 
직원 이름 : 박효신

직원 번호 : 22222
직원 이름 : 나얼

직원 번호 : 33333
직원 이름 : 김동률

직원 번호 : 44444
직원 이름 : 이수


박효신 직원 1일 후 근무할 직원은 : 나얼
나얼 직원 2일 후 근무할 직원은 : 이수
김동률 직원 3일 후 근무할 직원은 : 나얼
이수 직원 4일 후 근무할 직원은 : 이수
profile
하루에 집중하자

0개의 댓글