자료구조(linked list 이용한 스케줄 관리 프로그램)
본 자료는 3페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
해당 자료는 3페이지 까지만 미리보기를 제공합니다.
3페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

자료구조(linked list 이용한 스케줄 관리 프로그램)에 대한 보고서 자료입니다.

목차

프로그래밍 소스(연결리스트 이용한 스케줄 프로그램)

본문내용

tf("\t\t스케줄 관리 프로그램");
printf("\n\n도움말을 원하시면 h를 눌러주세요\n");
while(1)
{
char b=0;
printf(">>");
scanf("%s", &b);
if(b=='h')
{
printf("i : insert a new schedule\n");
printf("d : delete a schedule\n");
printf("D : delete all schedules\n");
printf("p : print schedules for a date\n");
printf("P : print all schedules\n");
printf("m : modify a schedule\n");
printf("q : quit this program\n");
printf("h : show this help\n");
}
else if(b=='i')
{
add(&list1, 0, create_node(NULL)); //리스트의 처음에 새로운 노드 삽입
}
else if(b=='P')
{
display(&list1); //모든 노드의 값을 보여준다
}
else if(b=='D')
{
char k;
printf("정말로 모두 삭제하시겠습니까?(y/n)\n");
scanf("%s",&k);
if(k=='y' || k=='Y')
{
clear(&list1); //y, Y를 누르면 모든 데이터 삭제
printf("모든 데이터가 삭제되었습니다.\n");
}
}
else if(b=='d')
{
int n;
display(&list1);
printf("삭제하실 리스트의 번호를 입력하세요\n");
scanf("%d", &n);
delete_(&list1, n);
printf("%d번이 삭제되었습니다.\n", n);
display(&list1);
}
else if(b=='q')
{
exit(1);
}
else if(b=='p')
{
char a[100]; // 리스트노드의 date와 동일한 문자열 생성
printf("확인할 스케줄 날짜를 입력하시오 \nyear/month/day >>");
scanf("%s", a);
search(&list1, a);
}
else if(b=='m') // get_node_at은 v번째의 노드를 반환하기 때문에 ->를 쓸 수 있다
{
int v;
printf("리스트 번호를 입력하세요\n");
display(&list1);
scanf("\n%d", &v);
printf("수정전 : %s %s %s\n", get_node_at(&list1, v)->date, get_node_at(&list1, v)->time, get_node_at(&list1, v)->data);
delete_(&list1, v);
add(&list1, v, create_node(NULL));
printf("수정후 : ");
printf("%s %s %s\n", get_node_at(&list1, v)->date, get_node_at(&list1, v)->time, get_node_at(&list1, v)->data);
}
else
printf("잘못입력하셨습니다.\n");
}
return 0;
}
■ 과제중 발생한 문제 및 해결방법
=> 책을 보면서 어느정도 궁금증은 풀렸었으나 총 4일간 숙제를 했는데 그중에서 date를 입력했을 때 그 date값을 가지고 있는 노드를 출력하는 것이 제일 오래 걸렸다.
처음엔 if(p->date==(입력받은 문자열)) 로 했었으나 컴퓨터는 이 의도를 전혀 알아채지 못하고 오류메시지만 내놓을 뿐이었다. 이 이유를 인터넷 검색을 통해 if문에서
문자열의 비교는 strcmp라는 것으로 한다는 것을 알게 되었다.
=> 책에 있는 소스를 적어보고 'D'를 누르면 전체데이터가 지워져야하는데 홀수 번 째 데이터만 지워지는 것을 알 수 있다. 이는 노드를 가리키는 *p는 1씩 증가하고 지워진 노드 뒤에 있는 노드들은 앞으로 당겨지기 때문에 지워지지 않는 노드가 생긴 것이다. 이를 위해 for문에서 *p를 아예 처음노드만 가리키게 하여서 지울 수 있도록 해결하였다.
=> 처음에 프로그램은 수행이 한번 끝나면 종료가 되었다. 이를 막기 위해 return (함수)를
사용하였다. 이마저도 원활히 수행이 되지 않아서 노심초사하던 끝에 간단한 while을 쓰는 순간 프로그램을 종료시키지 않고 계속 돌릴 수 있게 되었다.
=> 책에 보면 반환형 타입을 ListNode로 설정한 것에 대한 의문을 가지고 프로그래밍을 했었다. 전혀 이해가 되지 않은 상태에서 다른 부분을 완성해 나갔었고 나중에 거의 다 프로그래밍을 완성했을 때 쯤 (반환형함수(&list, a))->data 를 쓰게 되면서 이 구조를 이해할 수 있게 되었다.
=> ListNode 자체에 정수형 변수를 두어 번호를 지정하려고 했었으나 삭제 또는 추가시에
이 번호를 어떻게 해야 할까 많은 고민을 했었다. 그러나 이 고민은 금새 해결이 되었다.
제일 마지막에 노드를 표현할 때에 순서대로 번호를 주어 출력하면 되었기 때문이다.
■ 배운 것
=> 먼저 반환형이라는 개념에 대해서 너무 모르고 있었다. 굉장히 쉬운 개념인데도 불구하고 항상 이걸 놓치고 있었다는 것이 굉장히 부끄럽다. 그리고 포인터와 &연산자의 개념까지 익혔으며 제일 기억에 남는 문자열 비교인 strcmp 를 알게 되었다.
연결리스트에서 자기참조 구조체의 필요성을 확실히 깨달았다.
■ 느낀 점
이번 과제에서 나는 약 200줄의 소스코드를 작성하였다. 물론 대부분은 책에서 가져온 것이지만 4일동안 고생한 만큼 내가 스스로 고친 부분도 상당히 많다. 지금 나는 점점 프로그래밍에 대해 흥미가 늘어가는 과정에 있다. 예전보다 많은 것을 느끼고 생각하면서 예전에 느꼈던 프로그래밍에 대한 두려움이 많이 사라졌으며 이제는 구조체, 포인터, 배열, 동적 메모리 할당에 대해서 부족함 없이 배웠고 또 충분히 이해하고 있다.
C언어를 어설프게 배우고 자료구조를 배우는 중이라서 기본이 부족하다는 것을 느끼고 있다. 게다가 이 과목이 쉬운 것은 아니라고 생각한다. 그래서 남들보다 더 열심히 하는 중이고
열심히 하는 만큼 자료구조를 더 완벽히 알아가고 싶다.
  • 가격1,500
  • 페이지수10페이지
  • 등록일2011.04.30
  • 저작시기2011.4
  • 파일형식한글(hwp)
  • 자료번호#673411
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니