Week 2-2 : ArrayList
< 숙제 Review >
- common(n) : 양의 정수 n에 대해여 3자리 마다 콤마를 찍어 출력하는 함수.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <stdio.h> void comma(int n) { if(n/1000 == 0) { printf("%d", n); return ; } comma(n/1000); printf(",%03d", n%1000); } int main() { int n; scanf("%d", &n); if(n < 0) { printf("-"); n = -n; } comma(n); return 0; } | cs |
- n-3 자리에 대해 콤마를 찍고 출력한 다음, 콤마를 찍고 나머지 세자리를 출력하면 된다.
- %03d : 3자리 확보, 빈자리는 0으로..!!
- 음수에 대한 예외처리는 19번 라인처럼 하면 될 것 같다.
< Tutoring >
- ArrayList
1) 구조체를 이용한 ArrayList 모델링하기.
1 2 3 4 5 6 | #define MAX 100 typedef struct { int list[MAX]; int len; } ArrayList; | cs |
>> 멤버 len 은 배열에 들어있는 데이터의 갯수..!!
2) init() 를 통한 초기화
1 2 3 4 | void init(ArrayList *plist) { plist->len = 0; } | cs |
>> C++ 에서 객체 생성시 생성자의 역할을 한다고 보면 된다.
>> 처음에 무엇을 초기화 해야할지 고민해보자..!
3) isEmpty(), isFull() 함수.
1 2 3 4 5 6 7 8 9 | int isEmpty(ArrayList *plist) { return plist->len == 0; } int isFull(ArrayList *plist) { return plist->len == MAX; } | cs |
>> 배열 요소의 갯수가 0개면 비어있는 상태.
>> len 의 갯수가 MAX 개면 가득 찬 상태..!!
4) 특정 위치에 데이터 삽입
1 2 3 4 5 6 7 8 9 10 | void add(ArrayList *plist, int pos, int data) { if(isFull(plist)) return ; if(!(0 <= pos && pos <= plist->len)) return ; for(int i=plist->len-1; i>=pos; i--) plist->list[i+1] = plist->list[i]; plist->list[pos] = data; plist->len++; } | cs |
>> 3 : 데이터가 가득차있으면 삽입 불가능.
>> 4 : 컨트롤 할 수 있는 인덱스의 범위를 벗어나면 삽입 불가능.
>> 6, 7 : 데이터를 중간에 삽입하는 경우, 삽입할 위치의 데이터부터 마지막 데이터까지 한칸씩 뒤로 밀어야 한다.
>> 데이터를 뒤로 한칸씩 옮길때는 마지막 데이터부터 옮겨야 한다. (값의 복사)
>> 8 : 원하는 위치에 데이터를 저장하는 코드.
>> 9 : 데이터를 삽입햇으므로 갯수 증가시키기.
5) 특정 위치의 데이터 삭제.
1 2 3 4 5 6 7 8 9 10 11 12 | int del(ArrayList *plist, int pos) { int ret; if(isEmpty(plist)) return -9999; if(!(0 <= pos && pos < plist->len)) return -9999; ret = plist->list[pos]; for(int i=pos; i<plist->len-1; i++) plist->list[i] = plist->list[i+1]; plist->len--; return ret; } | cs |
>> 5 : pos <= plist->len 이 아니다. 등호(=)가 빠져야 한다..!!
>> 8, 9 : 값을 왼쪽으로 한칸씩 옮긴다. 마지막 위치의 데이터는 신경안써도 된다.
>> plist->len 을 통해 유효한 데이터의 위치를 계산할 수 있다..!!
'Tutoring > 18-1 DS' 카테고리의 다른 글
Week 3-2 : Linked List (0) | 2018.04.15 |
---|---|
Week 3-1 : Linked List (0) | 2018.04.11 |
Week 2-1 : How to code Recursive function2 (0) | 2018.04.04 |
Week 1-2 : How to code Recursive function (0) | 2018.03.30 |
Week 1-1 : C Lang review (0) | 2018.03.28 |