배열 이해

9999 단어 cbeginnerscodenewbie

배열



배열은 동일한 데이터 유형의 여러 요소를 저장하는 선형 데이터 구조입니다.
동일한 데이터 유형의 데이터 모음으로 정의할 수도 있습니다.

통사론


data_type array_name[SIZE] 예: int data[10]
생성된 위치는 연속적입니다. 즉, 아래와 같이 서로 옆에 있습니다.

크기는 일반적으로 일정합니다. 즉, 일단 선언되면 조정할 수 없습니다.
사용하기 전에 배열의 크기를 지정해야 합니다.

배열 선언 방법



#define SIZE 10
int data[SIZE];

또는

const int SIZE = 10;
int data[SIZE];


배열은 정적 또는 동적으로 초기화할 수도 있습니다. 정적 초기화에서 배열은 선언될 때 값이 할당됩니다. 즉, 컴파일 시간 동안 동적 초기화에서는 프로그램이 실행 중일 때, 즉 런타임에 값이 할당됩니다.

배열은 또한 1차원, 2차원일 수 있습니다. 예: int data[10] , int data[10][20] , int data[5][2][7]


1차원 배열



어레이 초기화


int a[] = {45,10,25,24,78}; 또는 int a[5] = {45,10,25,24,78}; 또는

int a[5];
a[0] = 45;
a[1] = 10;
a[2] = 25;
a[3] = 24;
a[4] = 78;


위의 코드는 정적 배열의 예이고 아래의 코드는 런타임 시 사용자 입력 값이 동적인 경우입니다.

배열 요소 인쇄




#include<stdio.h>
int main()
{
    int i, a[5] = {45,10,25,24,78};
    for(i=0;i<5;i++)
    {
        printf("Value at %d is %d\n",i, a[i]);
    }
}


산출


배열에 사용자 입력




#include<stdio.h>
int main()
{
    int i, a[5];
    for(i=0;i<5;i++)
    {
        printf("[+]Enter value at position %d >>> ",i);
        scanf("%d",&a[i]);
    }
    printf("\n*****OUTPUT*****\n");
    for(i=0;i<5;i++)
    {
        printf("Value at %d is %d\n",i, a[i]);
    }
}


산출


어레이와 관련된 작업


  • 트래버스
  • 삭제
  • 인서트
  • 검색
  • 정렬
  • isEmpty
  • isFull 등

  • 트래버스 작업: 출력, 요소 계산 등을 통해 전체 배열을 통과할 수 있습니다. 트래버스 작업에 걸릴 수 있는 최대 시간은 1, O(1) 정도입니다.
    삭제 작업: 요소를 뒤로 이동해야 하므로 배열에서 비용이 많이 드는 작업입니다. 최대 소요 시간은 n, O(n) 순서이고 최소 시간은 1, O(1) 순서입니다.
    삽입 작업: 삭제와 마찬가지로 요소가 지정된 순서가 아닌 경우를 제외하고 요소를 삽입하는 동안 요소를 이동해야 하기 때문에 비용이 많이 듭니다.
    검색 작업: 배열의 요소를 검색할 수 있으며 첫 번째 위치에서 시작합니다. 최대 소요 시간은 order of n의 경우 linear search, order of log n의 경우 binary search에서 n 및 최소 시간입니다. 검색은 linear 또는 binary 일 수 있습니다.
    정렬 작업: 요소를 오름차순 또는 내림차순으로 정렬할 수 있습니다. 배열의 요소를 정렬하는 방법에는 병합 정렬, 빠른 정렬, 버블 정렬, 쉘 정렬, 선택 정렬 및 삽입 정렬과 같은 다양한 방법이 있습니다.
    isEmpty 연산은 배열이 비어 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다.
    isFull 연산은 배열이 가득 차면 true를 반환하고 그렇지 않으면 반환합니다.

    차수 1, O(n) - 소요 시간은 배열 크기나 다른 유형의 데이터 구조에 관계없이 일정함을 의미합니다.
    차수 n, O(n) - 평균 소요 시간은 배열의 크기에 따라 달라집니다. 즉, 크기가 클수록 소요 시간이 길어집니다.

    운영 구현 형식




    /*
    OPEN DOCUMENTATION
    Author: *************
    Description: ************
    Date: ***********
    Version: ***
    Contact: **********
    */
    #include<stdio.h>
    #include<stdlib.h>
    #include<stdbool.h>
    
    #define SIZE 10
    int data[SIZE];
    
    void traverse();
    void delete_begin();
    void delete_at_point(int);
    void delete_end();
    void insert_begin(int);
    void insert_at_point(int, int);
    void insert_end(int);
    void search(int);
    void sort_asc();
    void sort_dec();
    bool isFull();
    bool isEmpty();
    
    int main(){
        //menu
        int option,item,pos;
        printf("\n\n******MENU******\n-----------------------+");
        printf("\n1. Traverse Operations");
        printf("\n2. Delete Operations");
        printf("\n3. Insert Operations");
        printf("\n4. Search Operations");
        printf("\n5. Sort Operations");
        printf("\n6. IsFull Operation");
        printf("\n7. IsEmpty Operation");
        printf("\n\n");
        printf("[+]Select an option >>> ");
        scanf("%d",&option);
        if(option == 1){
            printf("\n******Traverse Operation******\n");
            traverse();
        }
        else if(option == 2){
            printf("\n******Delete Operation******\n");
            printf("\n1. Delete 1st Element");
            printf("\n2. Delete Element at a point");
            printf("\n3. Delete last Element");
            printf("\n\n[+]Select an option >>> ");
            scanf("%d",&option);
            if(option == 1){
                delete_begin();
            }
            else if(option == 2){
                printf("\n[+]Enter position >>> ");
                scanf("%d",&pos);
                delete_at_point(pos);
            }
            else if(option == 3){
                delete_end();
            }
            else{
                printf("Invalid Choice, try options 1 to 3");
            }
        }
        else if(option == 3){
            printf("\n******insert Operation******\n");
            printf("\n1. Insert 1st Element");
            printf("\n2. Insert Element at a point");
            printf("\n3. Insert last Element");
            printf("\n\n[+]Select an option >>> ");
            scanf("%d",&option);
            if(option == 1){
                printf("[+]Enter value to insert >>> ");
                scanf("%d",&item);
                insert_begin(item);
            }
            else if(option == 2){
                printf("[+]Enter value to insert >>> ");
                scanf("%d",&item);
                printf("\n[+]Enter position >>> ");
                scanf("%d",&pos);
                insert_at_point(item,pos);
            }
            else if(option == 3){
                printf("[+]Enter value to insert >>> ");
                scanf("%d",&item);
                insert_end(item);
            }
            else{
                printf("Invalid Choice, try options 1 to 3");
            }
        }
        else if(option == 4){
            printf("\n******Search Operation******\n");
            printf("[+] Enter element to search for >>> ");
            scanf("%d",&item);
            search(item);
        }
        else if(option == 5){
            printf("\n******Sort Operation******\n");
            printf("\n1. Sort in Ascending Order");
            printf("\n2. Sort in Descending order");
            printf("\n\n[+]Enter Option >>> ");
            scanf("%d",&option);
            if(option == 1){
                sort_asc();
            }
            else if(option == 2){
                sort_dec();
            }
            else{
                printf("\n\nInvalid Option!! Try with option 1 or 2!\n\n");
            }
        }
        else if(option == 6){
            printf("\n******isFull Operation******\n");
            isFull();
        }
        else if(option == 7){
            printf("\n******isEmpty Operation******\n");
            isEmpty();
        }
        else{
            printf("\n\nInvalid Options, Try a number between 1 and 7\n\n");
        }
    
        printf("~BY PROFF JEFF~\n");
        return 0;
    }
    void traverse(){
    //body
    }
    void delete_begin(){
    //body
    }
    void delete_at_point(int){
    //body
    }
    void delete_end(){
    //body
    }
    void insert_begin(int){
    //body
    }
    void insert_at_point(int, int){
    //body
    }
    void insert_end(int){
    //body
    }
    void search(int){
    //body
    }
    void sort_asc(){
    //body
    }
    void sort_dec(){
    //body
    }
    bool isFull(){
    //body
    }
    bool isEmpty(){
    //body
    }
    



    2차원 또는 2차원 배열



    2차원 배열은 1차원 배열과 유사하지만 행과 열이 있는 그리드(또는 테이블)로 시각화할 수 있습니다.

    통사론




    #include<stdio.h>
    int main()
    {
        int a[3][3];
    }
    


    여기 a는 어레이의 이름입니다.int는 배열의 데이터 유형입니다.
    배열의 size3*3이므로 배열에 최대 9개의 항목 또는 값을 저장할 수 있습니다.

    어레이 초기화




    int a[3][3] = {
            {40,50,60},
            {10,20,30},
            {70,80,90}
        };
    


    값 표시




    #include<stdio.h>
    int main(){
        int i,j, a[3][3] = {
            {40,50,60},
            {10,20,30},
            {70,80,90}
        };
        for(i=0;i<3;i++){
            for(j=0;j<3;j++){
                printf("%d  ", a[i][j]);
            }
            printf("\n");
        }
    }
    


    산출


    사용자로부터 입력 받기




    #include<stdio.h>
    int main(){
        int i,j, a[3][3];
        for(i=0;i<3;i++){
            for(j=0;j<3;j++){
                printf("[+]Enter value at [%d][%d] >>> ",i,j);
                scanf("%d",&a[i][j]);
            }
            printf("\n");
        }
        for(i=0;i<3;i++){
            for(j=0;j<3;j++){
                printf("%d  ", a[i][j]);
            }
            printf("\n");
        }
    }
    


    산출


    Array 다음에 스택, 큐, 연결 목록 및 구현과 같은 다른 선형 데이터 구조도 확인합니다.

    좋은 웹페이지 즐겨찾기