목차
프로그래밍 소스(연결리스트 이용한 스케줄 프로그램)
본문내용
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언어를 어설프게 배우고 자료구조를 배우는 중이라서 기본이 부족하다는 것을 느끼고 있다. 게다가 이 과목이 쉬운 것은 아니라고 생각한다. 그래서 남들보다 더 열심히 하는 중이고
열심히 하는 만큼 자료구조를 더 완벽히 알아가고 싶다.
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언어를 어설프게 배우고 자료구조를 배우는 중이라서 기본이 부족하다는 것을 느끼고 있다. 게다가 이 과목이 쉬운 것은 아니라고 생각한다. 그래서 남들보다 더 열심히 하는 중이고
열심히 하는 만큼 자료구조를 더 완벽히 알아가고 싶다.
키워드
추천자료
C++자료구조 버블소팅(Bubble sorting)
자료구조)배열을 이용한 다항식 계산 c++ 사용
자료구조 하노이타워(자바)
자료구조 미로찾기를 자바로 구현
자료구조 - 성적입력 후 학번별, 평균별 정렬하기
자료구조 알고리즘 (마방진)
[솔루션]_c언어로_쉽게_풀어쓴_자료구조(생능출판사)_솔루션_[컴퓨터][c언어로_쉽게_풀어쓴_...
구조체자료2
c로 쓴 자료구조론 연습문제 1장(데이터구조)
자료구조 (술취한 딱정벌레) - 소스코드
자료구조, 큐
자료구조 - stack과 queue {소스코드, 함수, 출력결과}
하노이타워/피보나치 수열 과제[자료구조/자료구조및실험/c언어/c#/피보나치/하노이/수열]
트리계산식 과제[자료구조/자료구조및실험/c언어/c#/트리/노드/postfix/true/출력/계산/조건/텀]
소개글