과제 1
교재의 자료실에서 소스코드를 다운 받으시오. 그리고 아래 문제 해결을 위해서 다음 두 파일을 프로젝트에 포함시키시오.
ArrayList.h, ArrayList.c
위의 두 파일을 프로젝트에 포함하면 교재의 예제 ListMain.c와 같이 리스트를 사용할 수 있습니다. 따라서 이를 기반으로 다음의 순서대로 일이 진행되도록 ReportMain.c 함수를 작성하시오.
[1] 리스트를 생성 및 초기화한 다음, 정수 1부터 20까지 리스트에 저장한다.
[2] 리스트에 저장된 데이터를 순서대로 출력한다.
[3] 리스트에 저장된 값을 순차적으로 참조하여 그 합을 계산하여 출력한다.
[4] 리스트에 저장된 값들 중 2와 3의 공배수에 해당하는 값을 모두 삭제한다.
[5] 리스트에 저장된 값을 순차적으로 참조하여 다시 그 합을 계산하여 출력한다.
[6] 마지막으로 리스트에 저장된 데이터를 순서대로 출력한다.
< 소스 >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | #include <stdio.h> #include "ArrayList.h" int main(void) { /*** ArrayList의 생성 및 초기화 ***/ List list; int data; ListInit(&list); int sum = 0; /*** 20개의 데이터 저장 ***/ for (int i = 1; i <= 20; i++) { LInsert(&list, i); } /*** 저장된 데이터의 전체 출력 ***/ printf("현재 데이터의 수: %d \n", LCount(&list)); if(LFirst(&list, &data)) // 첫 번째 데이터 조회 { printf("%d ", data); sum += data; while (LNext(&list, &data)) { // 두 번째 이후의 데이터 조회 printf("%d ", data); sum += data; } } printf("\n현재 데이터의 합: %d \n", sum); printf("\n\n"); /*** 2와 3의 공배수를 탐색하여 모두 삭제 ***/ if(LFirst(&list, &data)) { if(data % 2 == 0 && data % 3 == 0) LRemove(&list); while(LNext(&list, &data)) { if(data%2 == 0 && data % 3 == 0) LRemove(&list); } } /*** 삭제 후 저장된 데이터 전체 출력 ***/ printf("삭제 후 데이터의 수: %d \n", LCount(&list)); sum = 0; if(LFirst(&list, &data)) { printf("%d ", data); sum += data; while (LNext(&list, &data)) { printf("%d ", data); sum += data; } } printf("\n삭제 후 데이터의 합: %d \n", sum); printf("\n\n"); printf("삭제 후 데이터의 수: %d \n", LCount(&list)); if (LFirst(&list, &data)) { printf("%d ", data); while (LNext(&list, &data)) printf("%d ", data); } printf("\n"); return 0; } | cs |
'대학교 > 2.데이터구조' 카테고리의 다른 글
• Employee (0) | 2017.04.21 |
---|---|
데이터구조 소스 (0) | 2017.04.21 |
하노이타워(그래픽) (0) | 2017.04.21 |