728x90
반응형
Array (배열)
: 연속된 주소, 같은 타입
array는 에를 들어, 8개의 자리가 있어도 꽉 차있지 않을 수도 있음 > 빈 칸이 있을 수도 있다는 것
how to store items in an array? (배열에 데이터를 어떻게 저장하는가)
packed vs unpacked
- 빈 자리를 한 쪽으로 모으는지 여부에 따른 것
- packed : 사용하는 칸을 한 쪽으로 뭉쳐놓기
- unpacked : 사용하지 않는 칸과 사용하는 칸이 섞여 산발적으로 데이터가 흩어져있음
sorted vs unsorted
- item들이 정렬된 상태를 유지하는지의 여부에 따른 것
- 같은 값들이 없다는 전제 하에 이루어짐
- sorted : 정렬된 상태
- unsorted : 정렬되지 않은 상태
Packed Unsorted
index | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
value | 3 | 0 | 2 | 7 | 8 | 4 | 1 |
- 가장 간단한 방법
- item의 개수를 표시하는 변수가 따로 필요함 : 한 쪽에 데이터가 몰려있기 때문에 유의미한 데이터의 개수를 세주면, 그것이 유효한 배열의 size라고 볼 수 있다.
#include <stdio.h>
int a[100] = {0};
int size = 0;
int arr_search(int a[], int n, int x){
// 존재 하면 index를, 존재하지 않으면 -1을 리턴함
if(n == 0) return -1;
else{
for(int i = 0; i < n; i ++){
if(a[i] == x) return i;
}
}
return -1;
}
void arr_insert(int a[], int n, int x){
// search 를 먼저 수행 > 존재하지 않으면 insert
if(arr_search(a, n, x) == -1){
//맨 끝에 값을 추가함
a[n] = x;
printf("%d is inserted in index %d\n", x, n+1);
size++;
}
else printf("%d already exists\n", x);
}
void arr_delete(int a[], int n, int x){
//search를 먼저 수행 > 존재하면 delete
int check = arr_search(a, n, x);
if(check == -1) printf("There is no %d\n", x);
else{
//끝에 있는 값을 삭제할 값으로 옮기고 배열의 크기를 줄임
a[check] = a[n-1];
printf("deleted %d\n", x);
size--;
}
}
int main(int argc, const char * argv[]) {
int x;
char choose;
while(1){
// 배열 출력
for(int i = 0; i < size; i++) printf("%2d ", i);
printf("\n");
for(int i = 0; i < size; i++) printf("%2d ", a[i]);
printf("\n");
scanf(" %c", &choose);
//search
if (choose == 's'){
scanf("%d", &x);
int check = arr_search(a, size, x);
if(check == -1) printf("there is no data %d\n", x);
else{
printf("Data is at index %d\n", check);
}
}
//insert
if (choose == 'i'){
scanf("%d", &x);
arr_insert(a, size, x);
}
//delete
if (choose == 'd'){
scanf("%d", &x);
arr_delete(a, size, x);
}
//quit
if (choose == 'q'){
break;
}
}
}
- search : O(n) - Linear search
- insert : [search, O(n)] O(1) - insert 전에 search를 실행해야함 (같은 값 중복 방지)
- delete : [search, O(n)] O(1) - delete 전에 search를 실행해야함
size : 현재 배열의 크기, insert 시 들어가야할 위치라고 볼 수 있다. 배열의 크기 -1 = 배열의 인덱스이기 때문에
* delete할 때 마지막 값은 size -1 임을 잊지 말자!
728x90
반응형
'CS > Data Structure' 카테고리의 다른 글
[ Arrays for search, insert, delete ] Unpacked unsorted & Unpacked sorted (1) | 2024.04.10 |
---|---|
[ Arrays for search, insert, delete ] Packed sorted (0) | 2024.04.10 |
Merge Sort (0) | 2024.04.09 |
Selection Sort (0) | 2024.03.30 |
Binary search (2) | 2024.03.29 |