7.10.2017

07.10 자료구조

// gkfk0316@gmail.com chiz7@naver.com


/*
#include <stdio.h>
void main() {
  void *ptr;
  int a = 3;
  char b = 'A';
  ptr = (int *)&a; //ptr이 int 형이 아니라서 (int*)해줘야함
  printf("%d\n", *(int*)ptr); //void형이라서 형변환 2번 해줘야함
  ptr = (char*)&b;
} */

//수학에서의 집합 : set - 서로 다른 원소들의 모임
// {1,3,5} 1 {1,3,5}
//bag = {1,3,5} 1 {1,3,5,1}

========================================================================

int check(int *pA, int num) {  //중복이면, 출력문 중복
  for (int i = 0; i < 3; i++) {
    if (pA[i] == num) return 1;
  }
  return 0;
}

void add(int *pA, int num) {
  if (check(pA, num)) {
    printf("중복임");
    return;
  };
  pA[3] = num;
}

void main() {
  int arr[5] = { 1,3,5 };
  int num;
  printf("{");
  for (int i = 0; i < 3; i++) {
    printf("%d", arr[i]);
    if (i == 3) break;
    printf(", ");
  } printf("\n추가할 원소를 입력하세요 : ");
  scanf("%d", &num);
  add(arr, num);
  printf("{");
  for (int i = 0; i < 4; i++) {
    printf("%d", arr[i]);
    if (i == 3) break;
    printf(", ");
  } printf("}\n");
}


/*{1,2,3,4,5,6,7,8}
{1,2,3,4,0,5,6,7,8} // memmove
{1,2,3,4,9,5,6,7,8} // insert_arr
*/

========================================================================

#include <stdio.h>
int size = 8;
void memmove(int *pA, int index) {
  int arr[10] = { 0 };
  for (int i = 0; i < size; i++) {
    arr[i] = pA[i];
    if (i > index)
      arr[i] = pA[i-1];
  }
  for (int i = 0; i < size; i++) { 
    pA[i] = arr[i];
  }
  pA[index] = 0;
}

//메모리의 특정 소스를 몰적 위치로 복사하며, 기존에 있던 데이터는 size 만큼 이동
// 1. 요소가 복사될 위치 필요
// 2. 복사할 요소가 있는 위치
// 3. 이동할 사이즈

void insert_arr(int *pA, int index, int num) {
  size++;
  memmove(pA, index);
  pA[index] = num;
}

void main() {
  int arr[10] = { 1,2,3,4,5,6,7,8 };
  printf("memmove() 전\n");
  for (int i = 0; i < size; i++) {
    printf("%2d", arr[i]);
  }

  insert_arr(arr, 3, 4);
  memmove(arr, 3);
  printf("\nmemmove() 후\n");
  for (int j = 0; j < size; j++) {
    printf("%2d", arr[j]);
  }
}

댓글 없음:

댓글 쓰기