목록lecture (31)
happy coding
배열 배열이란 동일한 타입의 데이터가 여러 개 저장되어 있는 데이터 저장 장소를 의미한다. 배열 안에 있는 각각의 데이터들은 정수로 되어 있는 번호에 의해 접근이 가능하다. 배열을 이용하면, 여러 개의 값을 하나의 이름으로 처리할 수 있다. 여기서 배열 원소의 번호를 인덱스 라고 한다. 배열의 크기가 주어지지 않았을 때 자동적으로 초기값의 개수만큼이 배열의 크기로 잡힌다. 배열을 복사하려는 경우 단순히 "=" 으로 복사하면 컴파일 오류가 나기 때문에, for 문을 이용하여 복사해야 한다. int a[SIZE]; int b[SIZE]; b = a;//error for (i=0;i 1000 printf("%d\n", arr);//배열의 첫 번째 인자의 시작 주소를 의미 printf("%d\n", arr[0]..
자료형에는 char, int, float, double 등 기본자료형과 배열, 열거형, 구조체, 공용체 등 파생자료형으로 나눌 수 있는데 그 중 하나인 구조체에 대해 배워보았다. 구조체란 같은 자료형으로 이루어진 배열과 다르게 서로 다른 자료형을 하나로 묶는 구조를 말한다. struct 구조체_태그_이름 { 자료형 멤버_이름; 자료형 멤버_이름; ... }; 구조체를 정의하는 것은 붕어빵 틀을 정의하는 것과 같고, 붕어빵을 실제로 만드릭 위해서는 구조체 변수를 선언해야 한다. # 아직도 구조체랑 객체의 차이를 모르겠다 구조체 멤버를 참조하려면 . 을 이용한다. 구조체명.구조체멤버명 링크드리스트 또한 구조체 형식을 포인터로 엮어둔 것이다. 같은 구조체 변수끼리 대입은 가능하지만 비교는 불가능하다. 구조체를..
컴퓨터에서는 각각의 문자에 숫자코드를 붙여 표시하는데, 1. 아스키 코드 2. 유니 코드 가 대표적으로 존재한다. 여기서 아스키 코드는 영문자를 표시하기 위해 사용하는 표준적인 8비트 문자 코드 이며, 유니 코드는 전세계의 모든 문자를 표현할 수 있도록 설계한 표준적인 16비트 문자 코드이다. 문자 변수와 문자 상수('A')는 %c나 %d로 출력하는 경우 같은 값을 나타낸다. 문자 상수인 경우 컴퓨터가 알아서 아스키 코드로 저장한다. 문자 상수를 변수에 저장하면 문자 변수이다. K 210 ~~ 103 M 220 ~~ 106 G 230 ~~ 109 T 240 ~~ 1012 byte 8 bit >> (unsigned)char (-27 ~ 27 - 1) half word 16 bit >> (unsigned)s..
자료구조 자료구조란 컴퓨터에서 어떤 문제를 해결하기 위해 자료의 특성에 따라서 자료를 분류하고 구성하고 저장해 놓은 것을 말한다. 컴퓨터가 효율적으로 문제를 처리하기 위해서는 문제를 정의하고 분석하여 그에 대한 최적의 프로그램을 작성해야 하기 때문에 자료구조는 중요하다. 알고리즘 이와 달리 알고리즘이란 문제해결방법을 추상화하여 단계적 절차를 논리적으로 기술해 놓은 명세서인데, 입력(input) : 알고리즘 수행에 필요한 자료가 외부에서 입력으로 제공될 수 있어야 한다. 출력(output) : 알고리즘 수행 후 하나 이상의 결과를 출력해야 한다. 명확성(definiteness) : 수행할 작업의 내용과 순서를 나타내는 알고리즘의 명령어들은 명확하게 명세되어야 한다. 유한성(finiteness) : 알고리즘..
버블 정렬이나 삽입 정렬이 수행되는 과정은 '작게' 이웃하는 원소의 자리바꾸기이다. 버블 정렬의 수행 과정은 작은(가벼운) 숫자가 배열의 앞부분으로 매우 느리게 이동하며, 삽입 정렬에서 마지막 원소가 가장 작은 숫자라면 그 숫자가 배열의 맨 앞으로 이동해야 하므로 모든 다른 숫자들이 1칸씩 오른쪽으로 이동해야 한다. 쉘 정렬은 이를 이용한 것이다. 쉘 정렬 쉘 정렬은 삽입 정렬을 이용하여 배열 뒷부분의 작은 숫자를 앞부분으로 '빠르게' 이동시키고, 동시에 앞부분의 큰 숫자는 뒷부분으로 '빠르게' 이동시킨다. 쉘 정렬은 gap 을 이용해 정렬한다. 점점 간격을 작게(마지막으로 1) 해서 타그룹에 속해 서로 비교되지 않은 숫자를 찾는데 여기서 모든 원소를 1개의 그룹으로 여기는 것을 삽입 정렬이라고 볼 수 ..
수업을 듣고 정리한 내용입니다. 삽입 정렬(Insertion Sort) 삽입 정렬이란, 배열을 정렬된 부분(앞 부분)과 정렬이 안된 부분(뒷 부분)으로 나누고, 정렬 안된 부분의 가장 왼쪽 원소를 정렬된 부분의 적절한 위치에 삽입하여 정렬되도록 하는 과정을 반복하여 진행하는 정렬이다. 위와 같은 배열이 있다고 가정하였을 때, 삽입 정렬을 실행하면 아래와 같다. 정렬이 안된 부분의 숫자 하나가 정렬된 부분에 삽입됨으로서, 정렬된 부분의 원소 수가 1개 증가하는 동시에 정렬 안된 부분의 원소 수는 1개 감소한다. 이것을 반복해 수행하면, 마지막엔 정렬아된 부분엔 아무 원소도 남지 않고, 입력이 정렬된다. 정렬은 배열의 첫 번째 우너소만이 정렬된 부분에 있는 상태에서 정렬을 시작하게 된다. //Insertio..
수업을 듣고 정리한 내용입니다. 선택 정렬(Selective sort) 입력 배열 전체에서 최솟값을 선택하여 배열의 0번 원소와 자리를 바꾸고, 다음엔 0번 원소를 제외한 나머지 원소에서 최솟값을 선ㅌ개하여, 배열 1번 원소와 자리를 바꾸는 방식을 통해 마지막에 2개의 원소 중 작은 것을 선택해 자리를 바꾼다. 이렇게 최솟값을 선택해 정렬하는 것을 선택 정렬이라고 한다. //selective sort 입력 : 크기가 n인 배열 출력 : 정렬된 배열 A for i=0 to n-2 min = i for j=i+1 to n-1//A[i] ~ A[n-1]에서 최솟값을 가짐 if A[j] < A[min] min = j A[i] A[min]//min이 최솟값이 있는 원소의 인덱스임 return A 시간복잡도 코드의..
버블 정렬(Bubble Sort) 버블 정렬은 이웃하는 숫자를 비교해 작은 수를 앞쪽으로 이동시키는 과정을 반복해 진행하는 정렬이다. 이 모습이 마치 버블과 같아 그러한 이름이 붙였다. 패스(pass) 버블 정렬에는 입력을 전반적으로 1번 처리하는 것을 패스라고 한다. //Bubble sort 입력 : 크기가 n인 배열 A 출력 : 정렬된 배열 A for pass=1 to n-1 for i=1 to n-pass if(A[i-1] > A[i])//위의 원소가 아래의 원소보다 크다면 A[i-1] A[i]//자리 바꾸기 return A 시간 복잡도 버블 정렬은 for 루프 속에서 for 루프를 수행하게 되는데 pass가 1인 경우 n-1 번 비교하게 되고 따라서 총 비교 횟수는 (n-1) + (n-2) .....