[ Arrays for search, insert, delete ] Packed unsorted

2024. 4. 9. 14:06·CS/Data Structure
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  (1) 2024.04.10
Merge Sort  (2) 2024.04.09
Selection Sort  (1) 2024.03.30
Binary search  (2) 2024.03.29
'CS/Data Structure' 카테고리의 다른 글
  • [ Arrays for search, insert, delete ] Unpacked unsorted & Unpacked sorted
  • [ Arrays for search, insert, delete ] Packed sorted
  • Merge Sort
  • Selection Sort
min_zu
min_zu
  • min_zu
    민주제도
    min_zu
  • 전체
    오늘
    어제
    • ._. (176)
      • AI (2)
        • DeepLearning (2)
        • CS231n (0)
      • Web (2)
        • ReactJS (0)
      • CS (83)
        • OS (7)
        • Data Structure (23)
        • Computer Architecture (8)
        • Computer Network (20)
        • Algorithm (25)
      • Linux (3)
        • KaliLinux (0)
        • Docker (1)
      • Hacking (83)
        • Write Up (25)
        • Pwnable (13)
        • Reversing (2)
        • Cryptography (12)
        • Web Hacking (4)
        • Window (6)
        • Network (7)
        • Web3 (13)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    WinAFL
    Web
    UTM
    DeepLearning
    OS
    Sort
    Graph
    ComputerArchitecture
    Linux
    AI
    Mac
    Tree
    DataStructure
    Search
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
min_zu
[ Arrays for search, insert, delete ] Packed unsorted
상단으로

티스토리툴바