Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어 포인터를 활용해 배열에 요소를 삽입하는 프로그램

문제 정의

사용자가 프로그램 실행 중에 배열에 요소를 삽입하고, 그 결과를 화면에 출력하는 C 프로그램을 작성해야 합니다. 만약 삽입하려는 위치가 배열의 크기보다 크다면 "잘못된 입력(Invalid Input)"이라는 메시지를 표시해야 합니다.

해결 방법

배열(Array)은 성격이 같은 여러 데이터를 하나의 이름 아래 묶어 저장하는 자료구조입니다. 배열에서 수행할 수 있는 기본 연산은 다음과 같습니다.

  • 삽입(Insert)
  • 삭제(Delete)
  • 검색(Search)

이 글에서는 포인터와 동적 메모리 할당(malloc())을 활용해 배열에 새로운 요소를 삽입하는 방법을 다룹니다. 포인터 표기법인 *(a+i)a[i]와 동일하게 동작하므로, 인덱스 대신 포인터 산술 연산으로 배열 요소에 접근할 수 있습니다.

알고리즘

포인터를 사용하여 배열에 요소를 삽입하는 절차는 다음과 같습니다.

  1. 배열의 크기(요소 개수)를 선언하고 입력받습니다.
  2. 포인터 변수를 선언합니다.
  3. malloc() 함수로 실행 시점에 필요한 만큼의 메모리를 동적으로 할당합니다.
  4. 배열 요소들을 입력받습니다.
  5. 새 요소를 삽입할 위치를 입력받습니다.
  6. 위치가 배열 크기보다 작거나 같은지 검사하고, 그렇지 않으면 "잘못된 입력"을 출력합니다.
  7. 해당 위치에 새 요소를 삽입하고, 그 위치 오른쪽의 기존 요소들은 한 칸씩 뒤로 밀어냅니다.

예시

배열의 크기가 5이고, 배열 요소가 다음과 같다고 가정해 보겠습니다.

1 2 3 4 5

여기에 값 9를 4번째 위치에 삽입하면 결과는 다음과 같습니다.

After insertion the array elements are:
1 2 3 9 4 5

C 프로그램 예제

다음은 포인터를 활용해 배열에 요소를 삽입하는 C 프로그램입니다.

#include<stdio.h>
#include<stdlib.h>
// 삽입 함수: n1은 배열 크기, a는 배열 포인터,
// len은 삽입 위치, ele는 삽입할 요소
void insert(int n1, int *a, int len, int ele){
   int i;
   printf("Array elements after insertion is:\n");
   // 삽입 위치 이전까지의 요소 출력
   for(i=0;i<len-1;i++){
      printf("%d\n",*(a+i));
   }
   // 새로 삽입한 요소 출력
   printf("%d\n",ele);
   // 나머지 요소 출력
   for(i=len-1;i<n1;i++){
      printf("%d\n",*(a+i));
   }
}
int main(){
   int *a,n1,i,len,ele;
   printf("enter size of array elements:");
   scanf("%d",&n1);
   // 실행 시점에 메모리 동적 할당
   a=(int*)malloc(n1*sizeof(int));
   printf("enter the elements:\n");
   for(i=0;i<n1;i++){
      scanf("%d",a+i);  // 포인터 산술 연산으로 주소 전달
   }
   printf("enter the position where the element need to be insert:\n");
   scanf("%d",&len);
   if(len<=n1){
      printf("enter the new element that to be inserted:");
      scanf("%d",&ele);
      insert(n1,a,len,ele);
   } else {
      printf("Invalid Input");
   }
   return 0;
}

실행 결과

위 프로그램을 컴파일하여 실행하면 다음과 같은 결과가 출력됩니다.

enter size of array elements:5
enter the elements:
1
3
5
7
2
enter the position where the element need to be insert:
5
enter the new element that to be inserted:9
Array elements after insertion are:
1
3
5
7
9
2

핵심 정리

이 프로그램의 핵심은 세 가지입니다. 첫째, malloc(n1*sizeof(int))을 통해 실행 시점에 배열 크기만큼 메모리를 유연하게 확보했습니다. 둘째, scanf("%d", a+i)처럼 포인터 산술 연산으로 배열 요소의 주소를 직접 전달했습니다. 셋째, 삽입 위치의 유효성을 검사해 잘못된 입력을 방지했습니다. 참고로 동적으로 할당한 메모리는 프로그램 종료 전에 free(a)로 해제해 주는 것이 안전한 습관입니다.