반응형
동적 배열할당을 해 주는 코드로써 처음 5개의 동적 할당을 해 준뒤 5개가 꽉차면 MAX_SIZE *= 2;를 해주고
삭제시 10개공간에서 5개 자료만 있다면 /2를 해주어 배열을 다시 5개로 만들어주는 코드이다.
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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | #define _CRT_SECURE_NO_WARNINGS // scanf 경고문 제거 #include <stdio.h> #include <stdlib.h> #include <string.h> struct LIST { char name[20]; int science; int english; }; int MAX_SIZE = 5; int main() { int score2, score3, num; char tmp[20]; int i = 0; LIST *ptr; LIST *temp; ptr = new LIST[MAX_SIZE]; // 5개 동적할당 while (1) { printf("1. 입력\n2. 출력\n3. 삭제\n4. 종료\n"); scanf("%d", &num); // 항목 기입 if (num == 1) { if (i >= MAX_SIZE) // 꽉차면 { temp = new LIST[MAX_SIZE]; // 새로운 공간 할당을 한 뒤, for (int j = 0; j < i; j++) // 임시 배열에 넣어준다 { strcpy((ptr + i)->name, tmp); (temp + j)->science = (ptr + j)->science; (temp + j)->english = (ptr + j)->english; } MAX_SIZE = MAX_SIZE * 2; // 공간을 2배 해주고 ptr = new LIST[MAX_SIZE]; // 새로 할당 for (int j = 0; j < i; j++) { strcpy((ptr + i)->name, tmp); (ptr + j)->science = (temp + j)->science; (ptr + j)->english = (temp + j)->english; } } scanf("%s %d %d", tmp, &score2, &score3); // 이름 및 과학 영어 성적 3가지 순서대로 입력 strcpy((ptr + i)->name, tmp); (ptr + i)->science = score2; (ptr + i)->english = score3; i++; } if (num == 2) { for (int j = 0; j < i; j++) { printf("%s ", (ptr + j)->name); printf("%d ", (ptr + j)->science); printf("%d ", (ptr + j)->english); printf("\n"); } } if (num == 3) { (ptr + i)->name[0] = '\0'; // 앞글자만 널문자로 만들어주고(상황에따라 유동적으로) (ptr + i)->science = NULL; (ptr + i)->english = NULL; i--; // 마지막 위치를 -1한다. if (MAX_SIZE / 2 == i) // 꽉차면 { temp = new LIST[MAX_SIZE + 1]; // 새로운 공간 할당을 한 뒤, (나누었을때 홀수 고려+1) for (int j = 0; j < i; j++) { strcpy((temp + j)->name, (ptr + j)->name); (temp + j)->science = (ptr + j)->science; (temp + j)->english = (ptr + j)->english; } MAX_SIZE = MAX_SIZE / 2; // 공간을 2배 해주고 ptr = new LIST[MAX_SIZE + 1]; // 새로 할당 for (int j = 0; j < i; j++) { strcpy((ptr + j)->name , (temp + j)->name); (ptr + j)->science = (temp + j)->science; (ptr + j)->english = (temp + j)->english; } } } if (num == 4) { delete[] ptr; return 0; } } } | Crocus |
반응형
'Applied > 자료구조' 카테고리의 다른 글
Template를 이용한 Stack (0) | 2016.04.11 |
---|---|
이진 탐색(Binary Search) 코드 구현 (0) | 2016.03.12 |
Dummy 노드를 이용한 연결 리스트(Dummy Linked List) 소스코드 (0) | 2016.02.28 |
연결 리스트 기반 스택(List Base Stack) 개념 (0) | 2016.02.26 |
연결 리스트 기반 스택(List Base Stack) 소스코드 (0) | 2016.02.24 |