책이야기

자료구조 2강

성시리. 2024. 9. 22. 23:42

[배열의 정의]

  • 사전적 정의 : 일정한 차례나 간격에 따라 벌여 놓음.
  • 배열의 특징 : 원소의 메인 메모리 공간(메인 메모리 주기억 장치)에서의 물리적 위치를 ‘순서’적으로 결정
  • 메모리 공간에서의 순서, 즉 ‘물리적 순서’를 자료구조로 표현.
  • 배열의 순서 : 메모리 공간에서의 저장되는 ‘원소값의 물리적 순서’
  • 배열 : 인덱스와 원소값(<index, value>)의 쌍으로 구성된 집합. 정의된 각 인덱스는 그 인덱스와 관련된 값을 가짐.

int a[3] = {1, 2, 3 }

  • 배열의 특성 : 모두 같은 자료형 → 동질의 값과 기억 공간의 크기가 같다.
  • 각 원소의 물리적 위치(메모리 주소)의 순서가 배열 인덱스 순서(논리적 순서)와 일치
  • → 배열의 첫 번째 원소가위치하는 메모리 주소를 알면 인덱스를 이용해 임의의 배열 원소의 주소값을 계산할 수 있음
  • —> 4. 일차원 배열에서 자세히 설명
  • 물리적 순서(메모리 주소값)과 간단한 숫자 순서(인덱스값)의 관계→ 개발자는 프로그램에서 선언한 배열과 인덱스값을 이용하여 알고리즘을 작성하고, 그 알고리즘에 따라 프로그램을 완성. 운영체제는 개발자의 추상화된 값과 컴퓨터의 물리적인 값을 연결시켜주고 사용자에게 it 서비스 제공. +) 프로그래밍 언어는 개발자와 운영체제 간의 의사소통을 위한 방법

[배열의 추상 자료형]

  • 배열의 추상 자료형 : 객체 및 관련된 연산의 정의로 구성됨. (자료구조 구현 전 설계단계)
    • 자료형 : 메모리 저장 할당을 위한 변수 선언 (자료구조의 구현 단계) ex) int a[3]
  • Adt Array 객체 : 인덱스와 값 <i,e> 쌍들의 집합
    • (ADT : abstract data type : 추상 자료형)
    • Index : 순서를 나타내는 원소의 유한집합
    • Element : 자료형이 같은 원소의 집합
  • 연산 : a∈Array; i∈Index; item∈Element; n∈Integer인 모든a, item, n에대해여다음과같은연산이정의됨.
    • a는 배열 이름 / i는 인덱스 / e는 원소값 / n은 배열의 크기
    • ① Array create(n) ::= 배열의크기가n인빈배열을생성하고배열을반환한다; ② Element retrieve(a,i)::= if (i∈Index) then { 배열의i번째에해당하는원소값‘e’를반환한다; } else { 에러메시지를반환한다; } ③ Array store(a, i, e) ::= if (i∈Index) then { 배열a의i번째위치에원소값‘e’를저장하고배열a를반환한다; } else { 인덱스i가배열a의크기를벗어나면에러메시지를반환한다; }
    • create(n) 연산 : n개의 원소를 저장할 수 있는 공백 배열을 생성
    • retrieve(a,i) 연산 : 배열a에서 i번째에 해당하는 인덱스를 검색하여 원소값을 반환
    • sotre(a,i,e) 연산 : 배열 a의 i번째 인덱스에 e라는 원소값을 저장하라는 연산

[배열의 연산의 구현]

  • 배열의 생성(create)
    • 배열의 매모리 공간 정의 → 반복문으로 초기값 0 저장
  → ex) int a[5]; 라고 배열을 선언하면, 위의 create 연산이 호출되어 컴파일러가 배열을 생성(구현)함.
  • 배열값의 검색(retrieve)
    • 인덱스 범위 정의 → 함수이름 정의 및 매개변수 전달 → 인덱스값 유효한지 비교 → 조건 참이면 a의 i번째 값 리턴 → i값 유효하지 않으면 error
 → K = a[2]; 라고 K에 a의 2번째 값을 대입시키면 retrieve 함수 호출을 통해 값 반환해서 대입시킴.
  • 배열값의 저장(store)
    • 인덱스 범위 정의 → 함수이름 정의 및 매개변수 전달 → 인덱스값 유효한지 비교 → 조건 참이면 a의 i번째 값에 e 저장 → i값 유효하지 않으면 error 출력
    • a[3] = 35; 라고 a의 3번째 인덱스에 35를 대입시키면 sotre 함수 호출을 통해 값을 저장시킴

[1차원 배열]

  • 한줄짜리 배열. 메모리 영역도 한줄로 할당. 배열의 원소들은 컴퓨터 메모리의 연속적 기억장소에 할당되어 순차적으로 저장.
  • 만약 시작주소가 1 , 각 자료형 크기가 3 이라고 하면 A[3] 저장 주소는 1+3*3 = 10.

[배열의 확장]

  • 2차원 배열 → 1차원 배열을 여러개 쌓아 놓은 것
  • 행렬은 객체관의 관계, 네트워크의 시뮬레이션, 최단거리 계산 등에서 사용되는데, 행렬을 컴퓨터에서 표현하기에는 2차원 배열이 적합함.
  • 2차원 배열애서 하나의 원소는 두개의 첨자 i(행), j(열)로 표현 ex) A[i][j]
  • 행우선 저장 방식 : 1차원 배열을 가로로 모아 놓은 2차원 배열의 메모리 영역 할당 방법.
    • 하나의 행을 연속적으로 메모리에 할당하고, 그 다음 행을 메모리 영역에 할당
    • 동일한 행의 원소를 먼저 차례대로 컴퓨터 메모리에 저장하고 다음 행의 첫번째 원소부터 차례대로 저장.
    • 코볼, 파스칼, C
    • 0행의 값들 먼저 할당, 그다음 1행 할당
  • 열우선 저장 방식 : 1차원 배열을 세로로 모아 놓은 2차원 배열의 메모리 영역 할당 방법
    • 하나의 열을 연속적으로 메모리에 할당 후 다음열 메모리에 할당
    • 동일한 열에 있는 원소를 먼저 차례대로 컴퓨터 메모리에 저장하고 다음 열로 이동하여 첫번째 원소부터 차례대로 저장
    • 포트란
    • 0열의 값들을 먼저 할당, 그다음 1열, 2열 할당.

[희소행렬의 개념]

  • 희소행렬 : 원소값 0인 원소가 그렇지 않은 원소보다 상대적으로 많은 행렬.
  • 0의 값을 저장하기 위해 불필요하게 많은 컴퓨터 메모리가 요구되므로, 0인 원소는 저장하지 않고 0이 아닌 값만 따로 모아 저장하는 방법 필요 —> 희소행렬의 효율적 배열 표현.
  • 각 원소를 (행번호, 열번호, 원소값) 형태로 나타냄. : 오른쪽 그림 2차원 배열.
  • [0,0]은 8, [0,1]은 9, [0,2]은 10
  • [1,0]은 0(행 인덱스값), [1,1]은 1(열 인덱스값), [1,2]는 20

    [배열의 정의]

    • 사전적 정의 : 일정한 차례나 간격에 따라 벌여 놓음.
    • 배열의 특징 : 원소의 메인 메모리 공간(메인 메모리 주기억 장치)에서의 물리적 위치를 ‘순서’적으로 결정
    • 메모리 공간에서의 순서, 즉 ‘물리적 순서’를 자료구조로 표현.
    • 배열의 순서 : 메모리 공간에서의 저장되는 ‘원소값의 물리적 순서’
    • 배열 : 인덱스와 원소값(<index, value>)의 쌍으로 구성된 집합. 정의된 각 인덱스는 그 인덱스와 관련된 값을 가짐.
    int a[3] = {1, 2, 3 }
    • 배열의 특성 : 모두 같은 자료형 → 동질의 값과 기억 공간의 크기가 같다.
    • 각 원소의 물리적 위치(메모리 주소)의 순서가 배열 인덱스 순서(논리적 순서)와 일치
    • → 배열의 첫 번째 원소가위치하는 메모리 주소를 알면 인덱스를 이용해 임의의 배열 원소의 주소값을 계산할 수 있음
    • —> 4. 일차원 배열에서 자세히 설명
    • 물리적 순서(메모리 주소값)과 간단한 숫자 순서(인덱스값)의 관계→ 개발자는 프로그램에서 선언한 배열과 인덱스값을 이용하여 알고리즘을 작성하고, 그 알고리즘에 따라 프로그램을 완성. 운영체제는 개발자의 추상화된 값과 컴퓨터의 물리적인 값을 연결시켜주고 사용자에게 it 서비스 제공. +) 프로그래밍 언어는 개발자와 운영체제 간의 의사소통을 위한 방법

    [배열의 추상 자료형]

    • 배열의 추상 자료형 : 객체 및 관련된 연산의 정의로 구성됨. (자료구조 구현 전 설계단계)
      • 자료형 : 메모리 저장 할당을 위한 변수 선언 (자료구조의 구현 단계) ex) int a[3]
    • Adt Array 객체 : 인덱스와 값 <i,e> 쌍들의 집합
      • (ADT : abstract data type : 추상 자료형)
      • Index : 순서를 나타내는 원소의 유한집합
      • Element : 자료형이 같은 원소의 집합
    • 연산 : a∈Array; i∈Index; item∈Element; n∈Integer인 모든a, item, n에대해여다음과같은연산이정의됨.
      • a는 배열 이름 / i는 인덱스 / e는 원소값 / n은 배열의 크기
      • ① Array create(n) ::= 배열의크기가n인빈배열을생성하고배열을반환한다; ② Element retrieve(a,i)::= if (i∈Index) then { 배열의i번째에해당하는원소값‘e’를반환한다; } else { 에러메시지를반환한다; } ③ Array store(a, i, e) ::= if (i∈Index) then { 배열a의i번째위치에원소값‘e’를저장하고배열a를반환한다; } else { 인덱스i가배열a의크기를벗어나면에러메시지를반환한다; }
      • create(n) 연산 : n개의 원소를 저장할 수 있는 공백 배열을 생성
      • retrieve(a,i) 연산 : 배열a에서 i번째에 해당하는 인덱스를 검색하여 원소값을 반환
      • sotre(a,i,e) 연산 : 배열 a의 i번째 인덱스에 e라는 원소값을 저장하라는 연산

    [배열의 연산의 구현]

    • 배열의 생성(create)
      • 배열의 매모리 공간 정의 → 반복문으로 초기값 0 저장
    • 배열값의 검색(retrieve)
      • 인덱스 범위 정의 → 함수이름 정의 및 매개변수 전달 → 인덱스값 유효한지 비교 → 조건 참이면 a의 i번째 값 리턴 → i값 유효하지 않으면 error
    • 배열값의 저장(store)
      • 인덱스 범위 정의 → 함수이름 정의 및 매개변수 전달 → 인덱스값 유효한지 비교 → 조건 참이면 a의 i번째 값에 e 저장 → i값 유효하지 않으면 error 출력
      • a[3] = 35; 라고 a의 3번째 인덱스에 35를 대입시키면 sotre 함수 호출을 통해 값을 저장시킴

    [1차원 배열]

    • 한줄짜리 배열. 메모리 영역도 한줄로 할당. 배열의 원소들은 컴퓨터 메모리의 연속적 기억장소에 할당되어 순차적으로 저장.
    • 만약 시작주소가 1 , 각 자료형 크기가 3 이라고 하면 A[3] 저장 주소는 1+3*3 = 10.

    [배열의 확장]

    • 2차원 배열 → 1차원 배열을 여러개 쌓아 놓은 것
    • 행렬은 객체관의 관계, 네트워크의 시뮬레이션, 최단거리 계산 등에서 사용되는데, 행렬을 컴퓨터에서 표현하기에는 2차원 배열이 적합함.
    • 2차원 배열애서 하나의 원소는 두개의 첨자 i(행), j(열)로 표현 ex) A[i][j]
    • 행우선 저장 방식 : 1차원 배열을 가로로 모아 놓은 2차원 배열의 메모리 영역 할당 방법.
      • 하나의 행을 연속적으로 메모리에 할당하고, 그 다음 행을 메모리 영역에 할당
      • 동일한 행의 원소를 먼저 차례대로 컴퓨터 메모리에 저장하고 다음 행의 첫번째 원소부터 차례대로 저장.
      • 코볼, 파스칼, C
      • 0행의 값들 먼저 할당, 그다음 1행 할당
    • 열우선 저장 방식 : 1차원 배열을 세로로 모아 놓은 2차원 배열의 메모리 영역 할당 방법
      • 하나의 열을 연속적으로 메모리에 할당 후 다음열 메모리에 할당
      • 동일한 열에 있는 원소를 먼저 차례대로 컴퓨터 메모리에 저장하고 다음 열로 이동하여 첫번째 원소부터 차례대로 저장
      • 포트란
      • 0열의 값들을 먼저 할당, 그다음 1열, 2열 할당.

    [희소행렬의 개념]

    • 희소행렬 : 원소값 0인 원소가 그렇지 않은 원소보다 상대적으로 많은 행렬.
    • 0의 값을 저장하기 위해 불필요하게 많은 컴퓨터 메모리가 요구되므로, 0인 원소는 저장하지 않고 0이 아닌 값만 따로 모아 저장하는 방법 필요 —> 희소행렬의 효율적 배열 표현.
    • 각 원소를 (행번호, 열번호, 원소값) 형태로 나타냄. : 오른쪽 그림 2차원 배열.
    • [0,0]은 8, [0,1]은 9, [0,2]은 10
    • [1,0]은 0(행 인덱스값), [1,1]은 1(열 인덱스값), [1,2]는 20

      [배열의 정의]

      • 사전적 정의 : 일정한 차례나 간격에 따라 벌여 놓음.
      • 배열의 특징 : 원소의 메인 메모리 공간(메인 메모리 주기억 장치)에서의 물리적 위치를 ‘순서’적으로 결정
      • 메모리 공간에서의 순서, 즉 ‘물리적 순서’를 자료구조로 표현.
      • 배열의 순서 : 메모리 공간에서의 저장되는 ‘원소값의 물리적 순서’
      • 배열 : 인덱스와 원소값(<index, value>)의 쌍으로 구성된 집합. 정의된 각 인덱스는 그 인덱스와 관련된 값을 가짐.
      int a[3] = {1, 2, 3 }
      • 배열의 특성 : 모두 같은 자료형 → 동질의 값과 기억 공간의 크기가 같다.
      • 각 원소의 물리적 위치(메모리 주소)의 순서가 배열 인덱스 순서(논리적 순서)와 일치
      • → 배열의 첫 번째 원소가위치하는 메모리 주소를 알면 인덱스를 이용해 임의의 배열 원소의 주소값을 계산할 수 있음
      • —> 4. 일차원 배열에서 자세히 설명
      • 물리적 순서(메모리 주소값)과 간단한 숫자 순서(인덱스값)의 관계→ 개발자는 프로그램에서 선언한 배열과 인덱스값을 이용하여 알고리즘을 작성하고, 그 알고리즘에 따라 프로그램을 완성. 운영체제는 개발자의 추상화된 값과 컴퓨터의 물리적인 값을 연결시켜주고 사용자에게 it 서비스 제공. +) 프로그래밍 언어는 개발자와 운영체제 간의 의사소통을 위한 방법

      [배열의 추상 자료형]

      • 배열의 추상 자료형 : 객체 및 관련된 연산의 정의로 구성됨. (자료구조 구현 전 설계단계)
        • 자료형 : 메모리 저장 할당을 위한 변수 선언 (자료구조의 구현 단계) ex) int a[3]
      • Adt Array 객체 : 인덱스와 값 <i,e> 쌍들의 집합
        • (ADT : abstract data type : 추상 자료형)
        • Index : 순서를 나타내는 원소의 유한집합
        • Element : 자료형이 같은 원소의 집합
      • 연산 : a∈Array; i∈Index; item∈Element; n∈Integer인 모든a, item, n에대해여다음과같은연산이정의됨.
        • a는 배열 이름 / i는 인덱스 / e는 원소값 / n은 배열의 크기
        • ① Array create(n) ::= 배열의크기가n인빈배열을생성하고배열을반환한다; ② Element retrieve(a,i)::= if (i∈Index) then { 배열의i번째에해당하는원소값‘e’를반환한다; } else { 에러메시지를반환한다; } ③ Array store(a, i, e) ::= if (i∈Index) then { 배열a의i번째위치에원소값‘e’를저장하고배열a를반환한다; } else { 인덱스i가배열a의크기를벗어나면에러메시지를반환한다; }
        • create(n) 연산 : n개의 원소를 저장할 수 있는 공백 배열을 생성
        • retrieve(a,i) 연산 : 배열a에서 i번째에 해당하는 인덱스를 검색하여 원소값을 반환
        • sotre(a,i,e) 연산 : 배열 a의 i번째 인덱스에 e라는 원소값을 저장하라는 연산

      [배열의 연산의 구현]

      • 배열의 생성(create)
        • 배열의 매모리 공간 정의 → 반복문으로 초기값 0 저장
      • 배열값의 검색(retrieve)
        • 인덱스 범위 정의 → 함수이름 정의 및 매개변수 전달 → 인덱스값 유효한지 비교 → 조건 참이면 a의 i번째 값 리턴 → i값 유효하지 않으면 error
      • 배열값의 저장(store)
        • 인덱스 범위 정의 → 함수이름 정의 및 매개변수 전달 → 인덱스값 유효한지 비교 → 조건 참이면 a의 i번째 값에 e 저장 → i값 유효하지 않으면 error 출력
        • a[3] = 35; 라고 a의 3번째 인덱스에 35를 대입시키면 sotre 함수 호출을 통해 값을 저장시킴

      [1차원 배열]

      • 한줄짜리 배열. 메모리 영역도 한줄로 할당. 배열의 원소들은 컴퓨터 메모리의 연속적 기억장소에 할당되어 순차적으로 저장.
      • 만약 시작주소가 1 , 각 자료형 크기가 3 이라고 하면 A[3] 저장 주소는 1+3*3 = 10.

      [배열의 확장]

      • 2차원 배열 → 1차원 배열을 여러개 쌓아 놓은 것
      • 행렬은 객체관의 관계, 네트워크의 시뮬레이션, 최단거리 계산 등에서 사용되는데, 행렬을 컴퓨터에서 표현하기에는 2차원 배열이 적합함.
      • 2차원 배열애서 하나의 원소는 두개의 첨자 i(행), j(열)로 표현 ex) A[i][j]
      • 행우선 저장 방식 : 1차원 배열을 가로로 모아 놓은 2차원 배열의 메모리 영역 할당 방법.
        • 하나의 행을 연속적으로 메모리에 할당하고, 그 다음 행을 메모리 영역에 할당
        • 동일한 행의 원소를 먼저 차례대로 컴퓨터 메모리에 저장하고 다음 행의 첫번째 원소부터 차례대로 저장.
        • 코볼, 파스칼, C
        • 0행의 값들 먼저 할당, 그다음 1행 할당
      • 열우선 저장 방식 : 1차원 배열을 세로로 모아 놓은 2차원 배열의 메모리 영역 할당 방법
        • 하나의 열을 연속적으로 메모리에 할당 후 다음열 메모리에 할당
        • 동일한 열에 있는 원소를 먼저 차례대로 컴퓨터 메모리에 저장하고 다음 열로 이동하여 첫번째 원소부터 차례대로 저장
        • 포트란
        • 0열의 값들을 먼저 할당, 그다음 1열, 2열 할당.

      [희소행렬의 개념]

      • 희소행렬 : 원소값 0인 원소가 그렇지 않은 원소보다 상대적으로 많은 행렬.
      • 0의 값을 저장하기 위해 불필요하게 많은 컴퓨터 메모리가 요구되므로, 0인 원소는 저장하지 않고 0이 아닌 값만 따로 모아 저장하는 방법 필요 —> 희소행렬의 효율적 배열 표현.
      • 각 원소를 (행번호, 열번호, 원소값) 형태로 나타냄. : 오른쪽 그림 2차원 배열.
      • [0,0]은 8, [0,1]은 9, [0,2]은 10
      • [1,0]은 0(행 인덱스값), [1,1]은 1(열 인덱스값), [1,2]는 20

        [배열의 정의]

        • 사전적 정의 : 일정한 차례나 간격에 따라 벌여 놓음.
        • 배열의 특징 : 원소의 메인 메모리 공간(메인 메모리 주기억 장치)에서의 물리적 위치를 ‘순서’적으로 결정
        • 메모리 공간에서의 순서, 즉 ‘물리적 순서’를 자료구조로 표현.
        • 배열의 순서 : 메모리 공간에서의 저장되는 ‘원소값의 물리적 순서’
        • 배열 : 인덱스와 원소값(<index, value>)의 쌍으로 구성된 집합. 정의된 각 인덱스는 그 인덱스와 관련된 값을 가짐.
        int a[3] = {1, 2, 3 }
        • 배열의 특성 : 모두 같은 자료형 → 동질의 값과 기억 공간의 크기가 같다.
        • 각 원소의 물리적 위치(메모리 주소)의 순서가 배열 인덱스 순서(논리적 순서)와 일치
        • → 배열의 첫 번째 원소가위치하는 메모리 주소를 알면 인덱스를 이용해 임의의 배열 원소의 주소값을 계산할 수 있음
        • —> 4. 일차원 배열에서 자세히 설명
        • 물리적 순서(메모리 주소값)과 간단한 숫자 순서(인덱스값)의 관계→ 개발자는 프로그램에서 선언한 배열과 인덱스값을 이용하여 알고리즘을 작성하고, 그 알고리즘에 따라 프로그램을 완성. 운영체제는 개발자의 추상화된 값과 컴퓨터의 물리적인 값을 연결시켜주고 사용자에게 it 서비스 제공. +) 프로그래밍 언어는 개발자와 운영체제 간의 의사소통을 위한 방법

        [배열의 추상 자료형]

        • 배열의 추상 자료형 : 객체 및 관련된 연산의 정의로 구성됨. (자료구조 구현 전 설계단계)
          • 자료형 : 메모리 저장 할당을 위한 변수 선언 (자료구조의 구현 단계) ex) int a[3]
        • Adt Array 객체 : 인덱스와 값 <i,e> 쌍들의 집합
          • (ADT : abstract data type : 추상 자료형)
          • Index : 순서를 나타내는 원소의 유한집합
          • Element : 자료형이 같은 원소의 집합
        • 연산 : a∈Array; i∈Index; item∈Element; n∈Integer인 모든a, item, n에대해여다음과같은연산이정의됨.
          • a는 배열 이름 / i는 인덱스 / e는 원소값 / n은 배열의 크기
          • ① Array create(n) ::= 배열의크기가n인빈배열을생성하고배열을반환한다; ② Element retrieve(a,i)::= if (i∈Index) then { 배열의i번째에해당하는원소값‘e’를반환한다; } else { 에러메시지를반환한다; } ③ Array store(a, i, e) ::= if (i∈Index) then { 배열a의i번째위치에원소값‘e’를저장하고배열a를반환한다; } else { 인덱스i가배열a의크기를벗어나면에러메시지를반환한다; }
          • create(n) 연산 : n개의 원소를 저장할 수 있는 공백 배열을 생성
          • retrieve(a,i) 연산 : 배열a에서 i번째에 해당하는 인덱스를 검색하여 원소값을 반환
          • sotre(a,i,e) 연산 : 배열 a의 i번째 인덱스에 e라는 원소값을 저장하라는 연산

        [배열의 연산의 구현]

        • 배열의 생성(create)
          • 배열의 매모리 공간 정의 → 반복문으로 초기값 0 저장
        • 배열값의 검색(retrieve)
          • 인덱스 범위 정의 → 함수이름 정의 및 매개변수 전달 → 인덱스값 유효한지 비교 → 조건 참이면 a의 i번째 값 리턴 → i값 유효하지 않으면 error
        • 배열값의 저장(store)
          • 인덱스 범위 정의 → 함수이름 정의 및 매개변수 전달 → 인덱스값 유효한지 비교 → 조건 참이면 a의 i번째 값에 e 저장 → i값 유효하지 않으면 error 출력
          • a[3] = 35; 라고 a의 3번째 인덱스에 35를 대입시키면 sotre 함수 호출을 통해 값을 저장시킴

        [1차원 배열]

        • 한줄짜리 배열. 메모리 영역도 한줄로 할당. 배열의 원소들은 컴퓨터 메모리의 연속적 기억장소에 할당되어 순차적으로 저장.
        • 만약 시작주소가 1 , 각 자료형 크기가 3 이라고 하면 A[3] 저장 주소는 1+3*3 = 10.

        [배열의 확장]

        • 2차원 배열 → 1차원 배열을 여러개 쌓아 놓은 것
        • 행렬은 객체관의 관계, 네트워크의 시뮬레이션, 최단거리 계산 등에서 사용되는데, 행렬을 컴퓨터에서 표현하기에는 2차원 배열이 적합함.
        • 2차원 배열애서 하나의 원소는 두개의 첨자 i(행), j(열)로 표현 ex) A[i][j]
        • 행우선 저장 방식 : 1차원 배열을 가로로 모아 놓은 2차원 배열의 메모리 영역 할당 방법.
          • 하나의 행을 연속적으로 메모리에 할당하고, 그 다음 행을 메모리 영역에 할당
          • 동일한 행의 원소를 먼저 차례대로 컴퓨터 메모리에 저장하고 다음 행의 첫번째 원소부터 차례대로 저장.
          • 코볼, 파스칼, C
          • 0행의 값들 먼저 할당, 그다음 1행 할당
        • 열우선 저장 방식 : 1차원 배열을 세로로 모아 놓은 2차원 배열의 메모리 영역 할당 방법
          • 하나의 열을 연속적으로 메모리에 할당 후 다음열 메모리에 할당
          • 동일한 열에 있는 원소를 먼저 차례대로 컴퓨터 메모리에 저장하고 다음 열로 이동하여 첫번째 원소부터 차례대로 저장
          • 포트란
          • 0열의 값들을 먼저 할당, 그다음 1열, 2열 할당.

        [희소행렬의 개념]

        • 희소행렬 : 원소값 0인 원소가 그렇지 않은 원소보다 상대적으로 많은 행렬.
        • 0의 값을 저장하기 위해 불필요하게 많은 컴퓨터 메모리가 요구되므로, 0인 원소는 저장하지 않고 0이 아닌 값만 따로 모아 저장하는 방법 필요 —> 희소행렬의 효율적 배열 표현.
        • 각 원소를 (행번호, 열번호, 원소값) 형태로 나타냄. : 오른쪽 그림 2차원 배열.
        • [0,0]은 8, [0,1]은 9, [0,2]은 10
        • [1,0]은 0(행 인덱스값), [1,1]은 1(열 인덱스값), [1,2]는 20

          [배열의 정의]

          • 사전적 정의 : 일정한 차례나 간격에 따라 벌여 놓음.
          • 배열의 특징 : 원소의 메인 메모리 공간(메인 메모리 주기억 장치)에서의 물리적 위치를 ‘순서’적으로 결정
          • 메모리 공간에서의 순서, 즉 ‘물리적 순서’를 자료구조로 표현.
          • 배열의 순서 : 메모리 공간에서의 저장되는 ‘원소값의 물리적 순서’
          • 배열 : 인덱스와 원소값(<index, value>)의 쌍으로 구성된 집합. 정의된 각 인덱스는 그 인덱스와 관련된 값을 가짐.
          int a[3] = {1, 2, 3 }
          • 배열의 특성 : 모두 같은 자료형 → 동질의 값과 기억 공간의 크기가 같다.
          • 각 원소의 물리적 위치(메모리 주소)의 순서가 배열 인덱스 순서(논리적 순서)와 일치
          • → 배열의 첫 번째 원소가위치하는 메모리 주소를 알면 인덱스를 이용해 임의의 배열 원소의 주소값을 계산할 수 있음
          • —> 4. 일차원 배열에서 자세히 설명
          • 물리적 순서(메모리 주소값)과 간단한 숫자 순서(인덱스값)의 관계→ 개발자는 프로그램에서 선언한 배열과 인덱스값을 이용하여 알고리즘을 작성하고, 그 알고리즘에 따라 프로그램을 완성. 운영체제는 개발자의 추상화된 값과 컴퓨터의 물리적인 값을 연결시켜주고 사용자에게 it 서비스 제공. +) 프로그래밍 언어는 개발자와 운영체제 간의 의사소통을 위한 방법

          [배열의 추상 자료형]

          • 배열의 추상 자료형 : 객체 및 관련된 연산의 정의로 구성됨. (자료구조 구현 전 설계단계)
            • 자료형 : 메모리 저장 할당을 위한 변수 선언 (자료구조의 구현 단계) ex) int a[3]
          • Adt Array 객체 : 인덱스와 값 <i,e> 쌍들의 집합
            • (ADT : abstract data type : 추상 자료형)
            • Index : 순서를 나타내는 원소의 유한집합
            • Element : 자료형이 같은 원소의 집합
          • 연산 : a∈Array; i∈Index; item∈Element; n∈Integer인 모든a, item, n에대해여다음과같은연산이정의됨.
            • a는 배열 이름 / i는 인덱스 / e는 원소값 / n은 배열의 크기
            • ① Array create(n) ::= 배열의크기가n인빈배열을생성하고배열을반환한다; ② Element retrieve(a,i)::= if (i∈Index) then { 배열의i번째에해당하는원소값‘e’를반환한다; } else { 에러메시지를반환한다; } ③ Array store(a, i, e) ::= if (i∈Index) then { 배열a의i번째위치에원소값‘e’를저장하고배열a를반환한다; } else { 인덱스i가배열a의크기를벗어나면에러메시지를반환한다; }
            • create(n) 연산 : n개의 원소를 저장할 수 있는 공백 배열을 생성
            • retrieve(a,i) 연산 : 배열a에서 i번째에 해당하는 인덱스를 검색하여 원소값을 반환
            • sotre(a,i,e) 연산 : 배열 a의 i번째 인덱스에 e라는 원소값을 저장하라는 연산

          [배열의 연산의 구현]

          • 배열의 생성(create)
            • 배열의 매모리 공간 정의 → 반복문으로 초기값 0 저장
          • 배열값의 검색(retrieve)
            • 인덱스 범위 정의 → 함수이름 정의 및 매개변수 전달 → 인덱스값 유효한지 비교 → 조건 참이면 a의 i번째 값 리턴 → i값 유효하지 않으면 error
          • 배열값의 저장(store)
            • 인덱스 범위 정의 → 함수이름 정의 및 매개변수 전달 → 인덱스값 유효한지 비교 → 조건 참이면 a의 i번째 값에 e 저장 → i값 유효하지 않으면 error 출력
            • a[3] = 35; 라고 a의 3번째 인덱스에 35를 대입시키면 sotre 함수 호출을 통해 값을 저장시킴

          [1차원 배열]

          • 한줄짜리 배열. 메모리 영역도 한줄로 할당. 배열의 원소들은 컴퓨터 메모리의 연속적 기억장소에 할당되어 순차적으로 저장.
          • 만약 시작주소가 1 , 각 자료형 크기가 3 이라고 하면 A[3] 저장 주소는 1+3*3 = 10.

          [배열의 확장]

          • 2차원 배열 → 1차원 배열을 여러개 쌓아 놓은 것
          • 행렬은 객체관의 관계, 네트워크의 시뮬레이션, 최단거리 계산 등에서 사용되는데, 행렬을 컴퓨터에서 표현하기에는 2차원 배열이 적합함.
          • 2차원 배열애서 하나의 원소는 두개의 첨자 i(행), j(열)로 표현 ex) A[i][j]
          • 행우선 저장 방식 : 1차원 배열을 가로로 모아 놓은 2차원 배열의 메모리 영역 할당 방법.
            • 하나의 행을 연속적으로 메모리에 할당하고, 그 다음 행을 메모리 영역에 할당
            • 동일한 행의 원소를 먼저 차례대로 컴퓨터 메모리에 저장하고 다음 행의 첫번째 원소부터 차례대로 저장.
            • 코볼, 파스칼, C
            • 0행의 값들 먼저 할당, 그다음 1행 할당
          • 열우선 저장 방식 : 1차원 배열을 세로로 모아 놓은 2차원 배열의 메모리 영역 할당 방법
            • 하나의 열을 연속적으로 메모리에 할당 후 다음열 메모리에 할당
            • 동일한 열에 있는 원소를 먼저 차례대로 컴퓨터 메모리에 저장하고 다음 열로 이동하여 첫번째 원소부터 차례대로 저장
            • 포트란
            • 0열의 값들을 먼저 할당, 그다음 1열, 2열 할당.

          [희소행렬의 개념]

          • 희소행렬 : 원소값 0인 원소가 그렇지 않은 원소보다 상대적으로 많은 행렬.
          • 0의 값을 저장하기 위해 불필요하게 많은 컴퓨터 메모리가 요구되므로, 0인 원소는 저장하지 않고 0이 아닌 값만 따로 모아 저장하는 방법 필요 —> 희소행렬의 효율적 배열 표현.
          • 각 원소를 (행번호, 열번호, 원소값) 형태로 나타냄. : 오른쪽 그림 2차원 배열.
          • [0,0]은 8, [0,1]은 9, [0,2]은 10
          • [1,0]은 0(행 인덱스값), [1,1]은 1(열 인덱스값), [1,2]는 20

            [배열의 정의]

            • 사전적 정의 : 일정한 차례나 간격에 따라 벌여 놓음.
            • 배열의 특징 : 원소의 메인 메모리 공간(메인 메모리 주기억 장치)에서의 물리적 위치를 ‘순서’적으로 결정
            • 메모리 공간에서의 순서, 즉 ‘물리적 순서’를 자료구조로 표현.
            • 배열의 순서 : 메모리 공간에서의 저장되는 ‘원소값의 물리적 순서’
            • 배열 : 인덱스와 원소값(<index, value>)의 쌍으로 구성된 집합. 정의된 각 인덱스는 그 인덱스와 관련된 값을 가짐.
            int a[3] = {1, 2, 3 }
            • 배열의 특성 : 모두 같은 자료형 → 동질의 값과 기억 공간의 크기가 같다.
            • 각 원소의 물리적 위치(메모리 주소)의 순서가 배열 인덱스 순서(논리적 순서)와 일치
            • → 배열의 첫 번째 원소가위치하는 메모리 주소를 알면 인덱스를 이용해 임의의 배열 원소의 주소값을 계산할 수 있음
            • —> 4. 일차원 배열에서 자세히 설명
            • 물리적 순서(메모리 주소값)과 간단한 숫자 순서(인덱스값)의 관계→ 개발자는 프로그램에서 선언한 배열과 인덱스값을 이용하여 알고리즘을 작성하고, 그 알고리즘에 따라 프로그램을 완성. 운영체제는 개발자의 추상화된 값과 컴퓨터의 물리적인 값을 연결시켜주고 사용자에게 it 서비스 제공. +) 프로그래밍 언어는 개발자와 운영체제 간의 의사소통을 위한 방법

            [배열의 추상 자료형]

            • 배열의 추상 자료형 : 객체 및 관련된 연산의 정의로 구성됨. (자료구조 구현 전 설계단계)
              • 자료형 : 메모리 저장 할당을 위한 변수 선언 (자료구조의 구현 단계) ex) int a[3]
            • Adt Array 객체 : 인덱스와 값 <i,e> 쌍들의 집합
              • (ADT : abstract data type : 추상 자료형)
              • Index : 순서를 나타내는 원소의 유한집합
              • Element : 자료형이 같은 원소의 집합
            • 연산 : a∈Array; i∈Index; item∈Element; n∈Integer인 모든a, item, n에대해여다음과같은연산이정의됨.
              • a는 배열 이름 / i는 인덱스 / e는 원소값 / n은 배열의 크기
              • ① Array create(n) ::= 배열의크기가n인빈배열을생성하고배열을반환한다; ② Element retrieve(a,i)::= if (i∈Index) then { 배열의i번째에해당하는원소값‘e’를반환한다; } else { 에러메시지를반환한다; } ③ Array store(a, i, e) ::= if (i∈Index) then { 배열a의i번째위치에원소값‘e’를저장하고배열a를반환한다; } else { 인덱스i가배열a의크기를벗어나면에러메시지를반환한다; }
              • create(n) 연산 : n개의 원소를 저장할 수 있는 공백 배열을 생성
              • retrieve(a,i) 연산 : 배열a에서 i번째에 해당하는 인덱스를 검색하여 원소값을 반환
              • sotre(a,i,e) 연산 : 배열 a의 i번째 인덱스에 e라는 원소값을 저장하라는 연산

            [배열의 연산의 구현]

            • 배열의 생성(create)
              • 배열의 매모리 공간 정의 → 반복문으로 초기값 0 저장
            • 배열값의 검색(retrieve)
              • 인덱스 범위 정의 → 함수이름 정의 및 매개변수 전달 → 인덱스값 유효한지 비교 → 조건 참이면 a의 i번째 값 리턴 → i값 유효하지 않으면 error
            • 배열값의 저장(store)
              • 인덱스 범위 정의 → 함수이름 정의 및 매개변수 전달 → 인덱스값 유효한지 비교 → 조건 참이면 a의 i번째 값에 e 저장 → i값 유효하지 않으면 error 출력
              • a[3] = 35; 라고 a의 3번째 인덱스에 35를 대입시키면 sotre 함수 호출을 통해 값을 저장시킴

            [1차원 배열]

            • 한줄짜리 배열. 메모리 영역도 한줄로 할당. 배열의 원소들은 컴퓨터 메모리의 연속적 기억장소에 할당되어 순차적으로 저장.
            • 만약 시작주소가 1 , 각 자료형 크기가 3 이라고 하면 A[3] 저장 주소는 1+3*3 = 10.

            [배열의 확장]

            • 2차원 배열 → 1차원 배열을 여러개 쌓아 놓은 것
            • 행렬은 객체관의 관계, 네트워크의 시뮬레이션, 최단거리 계산 등에서 사용되는데, 행렬을 컴퓨터에서 표현하기에는 2차원 배열이 적합함.
            • 2차원 배열애서 하나의 원소는 두개의 첨자 i(행), j(열)로 표현 ex) A[i][j]
            • 행우선 저장 방식 : 1차원 배열을 가로로 모아 놓은 2차원 배열의 메모리 영역 할당 방법.
              • 하나의 행을 연속적으로 메모리에 할당하고, 그 다음 행을 메모리 영역에 할당
              • 동일한 행의 원소를 먼저 차례대로 컴퓨터 메모리에 저장하고 다음 행의 첫번째 원소부터 차례대로 저장.
              • 코볼, 파스칼, C
              • 0행의 값들 먼저 할당, 그다음 1행 할당
            • 열우선 저장 방식 : 1차원 배열을 세로로 모아 놓은 2차원 배열의 메모리 영역 할당 방법
              • 하나의 열을 연속적으로 메모리에 할당 후 다음열 메모리에 할당
              • 동일한 열에 있는 원소를 먼저 차례대로 컴퓨터 메모리에 저장하고 다음 열로 이동하여 첫번째 원소부터 차례대로 저장
              • 포트란
              • 0열의 값들을 먼저 할당, 그다음 1열, 2열 할당.

            [희소행렬의 개념]

            • 희소행렬 : 원소값 0인 원소가 그렇지 않은 원소보다 상대적으로 많은 행렬.
            • 0의 값을 저장하기 위해 불필요하게 많은 컴퓨터 메모리가 요구되므로, 0인 원소는 저장하지 않고 0이 아닌 값만 따로 모아 저장하는 방법 필요 —> 희소행렬의 효율적 배열 표현.
            • 각 원소를 (행번호, 열번호, 원소값) 형태로 나타냄. : 오른쪽 그림 2차원 배열.
            • [0,0]은 8, [0,1]은 9, [0,2]은 10
            • [1,0]은 0(행 인덱스값), [1,1]은 1(열 인덱스값), [1,2]는 20

              [배열의 정의]

              • 사전적 정의 : 일정한 차례나 간격에 따라 벌여 놓음.
              • 배열의 특징 : 원소의 메인 메모리 공간(메인 메모리 주기억 장치)에서의 물리적 위치를 ‘순서’적으로 결정
              • 메모리 공간에서의 순서, 즉 ‘물리적 순서’를 자료구조로 표현.
              • 배열의 순서 : 메모리 공간에서의 저장되는 ‘원소값의 물리적 순서’
              • 배열 : 인덱스와 원소값(<index, value>)의 쌍으로 구성된 집합. 정의된 각 인덱스는 그 인덱스와 관련된 값을 가짐.
              int a[3] = {1, 2, 3 }
              • 배열의 특성 : 모두 같은 자료형 → 동질의 값과 기억 공간의 크기가 같다.
              • 각 원소의 물리적 위치(메모리 주소)의 순서가 배열 인덱스 순서(논리적 순서)와 일치
              • → 배열의 첫 번째 원소가위치하는 메모리 주소를 알면 인덱스를 이용해 임의의 배열 원소의 주소값을 계산할 수 있음
              • —> 4. 일차원 배열에서 자세히 설명
              • 물리적 순서(메모리 주소값)과 간단한 숫자 순서(인덱스값)의 관계→ 개발자는 프로그램에서 선언한 배열과 인덱스값을 이용하여 알고리즘을 작성하고, 그 알고리즘에 따라 프로그램을 완성. 운영체제는 개발자의 추상화된 값과 컴퓨터의 물리적인 값을 연결시켜주고 사용자에게 it 서비스 제공. +) 프로그래밍 언어는 개발자와 운영체제 간의 의사소통을 위한 방법

              [배열의 추상 자료형]

              • 배열의 추상 자료형 : 객체 및 관련된 연산의 정의로 구성됨. (자료구조 구현 전 설계단계)
                • 자료형 : 메모리 저장 할당을 위한 변수 선언 (자료구조의 구현 단계) ex) int a[3]
              • Adt Array 객체 : 인덱스와 값 <i,e> 쌍들의 집합
                • (ADT : abstract data type : 추상 자료형)
                • Index : 순서를 나타내는 원소의 유한집합
                • Element : 자료형이 같은 원소의 집합
              • 연산 : a∈Array; i∈Index; item∈Element; n∈Integer인 모든a, item, n에대해여다음과같은연산이정의됨.
                • a는 배열 이름 / i는 인덱스 / e는 원소값 / n은 배열의 크기
                • ① Array create(n) ::= 배열의크기가n인빈배열을생성하고배열을반환한다; ② Element retrieve(a,i)::= if (i∈Index) then { 배열의i번째에해당하는원소값‘e’를반환한다; } else { 에러메시지를반환한다; } ③ Array store(a, i, e) ::= if (i∈Index) then { 배열a의i번째위치에원소값‘e’를저장하고배열a를반환한다; } else { 인덱스i가배열a의크기를벗어나면에러메시지를반환한다; }
                • create(n) 연산 : n개의 원소를 저장할 수 있는 공백 배열을 생성
                • retrieve(a,i) 연산 : 배열a에서 i번째에 해당하는 인덱스를 검색하여 원소값을 반환
                • sotre(a,i,e) 연산 : 배열 a의 i번째 인덱스에 e라는 원소값을 저장하라는 연산

              [배열의 연산의 구현]

              • 배열의 생성(create)
                • 배열의 매모리 공간 정의 → 반복문으로 초기값 0 저장
              • 배열값의 검색(retrieve)
                • 인덱스 범위 정의 → 함수이름 정의 및 매개변수 전달 → 인덱스값 유효한지 비교 → 조건 참이면 a의 i번째 값 리턴 → i값 유효하지 않으면 error
              • 배열값의 저장(store)
                • 인덱스 범위 정의 → 함수이름 정의 및 매개변수 전달 → 인덱스값 유효한지 비교 → 조건 참이면 a의 i번째 값에 e 저장 → i값 유효하지 않으면 error 출력
                • a[3] = 35; 라고 a의 3번째 인덱스에 35를 대입시키면 sotre 함수 호출을 통해 값을 저장시킴

              [1차원 배열]

              • 한줄짜리 배열. 메모리 영역도 한줄로 할당. 배열의 원소들은 컴퓨터 메모리의 연속적 기억장소에 할당되어 순차적으로 저장.
              • 만약 시작주소가 1 , 각 자료형 크기가 3 이라고 하면 A[3] 저장 주소는 1+3*3 = 10.

              [배열의 확장]

              • 2차원 배열 → 1차원 배열을 여러개 쌓아 놓은 것
              • 행렬은 객체관의 관계, 네트워크의 시뮬레이션, 최단거리 계산 등에서 사용되는데, 행렬을 컴퓨터에서 표현하기에는 2차원 배열이 적합함.
              • 2차원 배열애서 하나의 원소는 두개의 첨자 i(행), j(열)로 표현 ex) A[i][j]
              • 행우선 저장 방식 : 1차원 배열을 가로로 모아 놓은 2차원 배열의 메모리 영역 할당 방법.
                • 하나의 행을 연속적으로 메모리에 할당하고, 그 다음 행을 메모리 영역에 할당
                • 동일한 행의 원소를 먼저 차례대로 컴퓨터 메모리에 저장하고 다음 행의 첫번째 원소부터 차례대로 저장.
                • 코볼, 파스칼, C
                • 0행의 값들 먼저 할당, 그다음 1행 할당
              • 열우선 저장 방식 : 1차원 배열을 세로로 모아 놓은 2차원 배열의 메모리 영역 할당 방법
                • 하나의 열을 연속적으로 메모리에 할당 후 다음열 메모리에 할당
                • 동일한 열에 있는 원소를 먼저 차례대로 컴퓨터 메모리에 저장하고 다음 열로 이동하여 첫번째 원소부터 차례대로 저장
                • 포트란
                • 0열의 값들을 먼저 할당, 그다음 1열, 2열 할당.

              [희소행렬의 개념]

              • 희소행렬 : 원소값 0인 원소가 그렇지 않은 원소보다 상대적으로 많은 행렬.
              • 0의 값을 저장하기 위해 불필요하게 많은 컴퓨터 메모리가 요구되므로, 0인 원소는 저장하지 않고 0이 아닌 값만 따로 모아 저장하는 방법 필요 —> 희소행렬의 효율적 배열 표현.
              • 각 원소를 (행번호, 열번호, 원소값) 형태로 나타냄. : 오른쪽 그림 2차원 배열.
              • [0,0]은 8, [0,1]은 9, [0,2]은 10
              • [1,0]은 0(행 인덱스값), [1,1]은 1(열 인덱스값), [1,2]는 20

                [배열의 정의]

                • 사전적 정의 : 일정한 차례나 간격에 따라 벌여 놓음.
                • 배열의 특징 : 원소의 메인 메모리 공간(메인 메모리 주기억 장치)에서의 물리적 위치를 ‘순서’적으로 결정
                • 메모리 공간에서의 순서, 즉 ‘물리적 순서’를 자료구조로 표현.
                • 배열의 순서 : 메모리 공간에서의 저장되는 ‘원소값의 물리적 순서’
                • 배열 : 인덱스와 원소값(<index, value>)의 쌍으로 구성된 집합. 정의된 각 인덱스는 그 인덱스와 관련된 값을 가짐.
                int a[3] = {1, 2, 3 }
                • 배열의 특성 : 모두 같은 자료형 → 동질의 값과 기억 공간의 크기가 같다.
                • 각 원소의 물리적 위치(메모리 주소)의 순서가 배열 인덱스 순서(논리적 순서)와 일치
                • → 배열의 첫 번째 원소가위치하는 메모리 주소를 알면 인덱스를 이용해 임의의 배열 원소의 주소값을 계산할 수 있음
                • —> 4. 일차원 배열에서 자세히 설명
                • 물리적 순서(메모리 주소값)과 간단한 숫자 순서(인덱스값)의 관계→ 개발자는 프로그램에서 선언한 배열과 인덱스값을 이용하여 알고리즘을 작성하고, 그 알고리즘에 따라 프로그램을 완성. 운영체제는 개발자의 추상화된 값과 컴퓨터의 물리적인 값을 연결시켜주고 사용자에게 it 서비스 제공. +) 프로그래밍 언어는 개발자와 운영체제 간의 의사소통을 위한 방법

                [배열의 추상 자료형]

                • 배열의 추상 자료형 : 객체 및 관련된 연산의 정의로 구성됨. (자료구조 구현 전 설계단계)
                  • 자료형 : 메모리 저장 할당을 위한 변수 선언 (자료구조의 구현 단계) ex) int a[3]
                • Adt Array 객체 : 인덱스와 값 <i,e> 쌍들의 집합
                  • (ADT : abstract data type : 추상 자료형)
                  • Index : 순서를 나타내는 원소의 유한집합
                  • Element : 자료형이 같은 원소의 집합
                • 연산 : a∈Array; i∈Index; item∈Element; n∈Integer인 모든a, item, n에대해여다음과같은연산이정의됨.
                  • a는 배열 이름 / i는 인덱스 / e는 원소값 / n은 배열의 크기
                  • ① Array create(n) ::= 배열의크기가n인빈배열을생성하고배열을반환한다; ② Element retrieve(a,i)::= if (i∈Index) then { 배열의i번째에해당하는원소값‘e’를반환한다; } else { 에러메시지를반환한다; } ③ Array store(a, i, e) ::= if (i∈Index) then { 배열a의i번째위치에원소값‘e’를저장하고배열a를반환한다; } else { 인덱스i가배열a의크기를벗어나면에러메시지를반환한다; }
                  • create(n) 연산 : n개의 원소를 저장할 수 있는 공백 배열을 생성
                  • retrieve(a,i) 연산 : 배열a에서 i번째에 해당하는 인덱스를 검색하여 원소값을 반환
                  • sotre(a,i,e) 연산 : 배열 a의 i번째 인덱스에 e라는 원소값을 저장하라는 연산

                [배열의 연산의 구현]

                • 배열의 생성(create)
                  • 배열의 매모리 공간 정의 → 반복문으로 초기값 0 저장
                • 배열값의 검색(retrieve)
                  • 인덱스 범위 정의 → 함수이름 정의 및 매개변수 전달 → 인덱스값 유효한지 비교 → 조건 참이면 a의 i번째 값 리턴 → i값 유효하지 않으면 error
                • 배열값의 저장(store)
                  • 인덱스 범위 정의 → 함수이름 정의 및 매개변수 전달 → 인덱스값 유효한지 비교 → 조건 참이면 a의 i번째 값에 e 저장 → i값 유효하지 않으면 error 출력
                  • a[3] = 35; 라고 a의 3번째 인덱스에 35를 대입시키면 sotre 함수 호출을 통해 값을 저장시킴

                [1차원 배열]

                • 한줄짜리 배열. 메모리 영역도 한줄로 할당. 배열의 원소들은 컴퓨터 메모리의 연속적 기억장소에 할당되어 순차적으로 저장.
                • 만약 시작주소가 1 , 각 자료형 크기가 3 이라고 하면 A[3] 저장 주소는 1+3*3 = 10.

                [배열의 확장]

                • 2차원 배열 → 1차원 배열을 여러개 쌓아 놓은 것
                • 행렬은 객체관의 관계, 네트워크의 시뮬레이션, 최단거리 계산 등에서 사용되는데, 행렬을 컴퓨터에서 표현하기에는 2차원 배열이 적합함.
                • 2차원 배열애서 하나의 원소는 두개의 첨자 i(행), j(열)로 표현 ex) A[i][j]
                • 행우선 저장 방식 : 1차원 배열을 가로로 모아 놓은 2차원 배열의 메모리 영역 할당 방법.
                  • 하나의 행을 연속적으로 메모리에 할당하고, 그 다음 행을 메모리 영역에 할당
                  • 동일한 행의 원소를 먼저 차례대로 컴퓨터 메모리에 저장하고 다음 행의 첫번째 원소부터 차례대로 저장.
                  • 코볼, 파스칼, C
                  • 0행의 값들 먼저 할당, 그다음 1행 할당
                • 열우선 저장 방식 : 1차원 배열을 세로로 모아 놓은 2차원 배열의 메모리 영역 할당 방법
                  • 하나의 열을 연속적으로 메모리에 할당 후 다음열 메모리에 할당
                  • 동일한 열에 있는 원소를 먼저 차례대로 컴퓨터 메모리에 저장하고 다음 열로 이동하여 첫번째 원소부터 차례대로 저장
                  • 포트란
                  • 0열의 값들을 먼저 할당, 그다음 1열, 2열 할당.

                [희소행렬의 개념]

                • 희소행렬 : 원소값 0인 원소가 그렇지 않은 원소보다 상대적으로 많은 행렬.
                • 0의 값을 저장하기 위해 불필요하게 많은 컴퓨터 메모리가 요구되므로, 0인 원소는 저장하지 않고 0이 아닌 값만 따로 모아 저장하는 방법 필요 —> 희소행렬의 효율적 배열 표현.
                • 각 원소를 (행번호, 열번호, 원소값) 형태로 나타냄. : 오른쪽 그림 2차원 배열.
                • [0,0]은 8, [0,1]은 9, [0,2]은 10
                • [1,0]은 0(행 인덱스값), [1,1]은 1(열 인덱스값), [1,2]는 20

                  [배열의 정의]

                  • 사전적 정의 : 일정한 차례나 간격에 따라 벌여 놓음.
                  • 배열의 특징 : 원소의 메인 메모리 공간(메인 메모리 주기억 장치)에서의 물리적 위치를 ‘순서’적으로 결정
                  • 메모리 공간에서의 순서, 즉 ‘물리적 순서’를 자료구조로 표현.
                  • 배열의 순서 : 메모리 공간에서의 저장되는 ‘원소값의 물리적 순서’
                  • 배열 : 인덱스와 원소값(<index, value>)의 쌍으로 구성된 집합. 정의된 각 인덱스는 그 인덱스와 관련된 값을 가짐.
                  int a[3] = {1, 2, 3 }
                  • 배열의 특성 : 모두 같은 자료형 → 동질의 값과 기억 공간의 크기가 같다.
                  • 각 원소의 물리적 위치(메모리 주소)의 순서가 배열 인덱스 순서(논리적 순서)와 일치
                  • → 배열의 첫 번째 원소가위치하는 메모리 주소를 알면 인덱스를 이용해 임의의 배열 원소의 주소값을 계산할 수 있음
                  • —> 4. 일차원 배열에서 자세히 설명
                  • 물리적 순서(메모리 주소값)과 간단한 숫자 순서(인덱스값)의 관계→ 개발자는 프로그램에서 선언한 배열과 인덱스값을 이용하여 알고리즘을 작성하고, 그 알고리즘에 따라 프로그램을 완성. 운영체제는 개발자의 추상화된 값과 컴퓨터의 물리적인 값을 연결시켜주고 사용자에게 it 서비스 제공. +) 프로그래밍 언어는 개발자와 운영체제 간의 의사소통을 위한 방법

                  [배열의 추상 자료형]

                  • 배열의 추상 자료형 : 객체 및 관련된 연산의 정의로 구성됨. (자료구조 구현 전 설계단계)
                    • 자료형 : 메모리 저장 할당을 위한 변수 선언 (자료구조의 구현 단계) ex) int a[3]
                  • Adt Array 객체 : 인덱스와 값 <i,e> 쌍들의 집합
                    • (ADT : abstract data type : 추상 자료형)
                    • Index : 순서를 나타내는 원소의 유한집합
                    • Element : 자료형이 같은 원소의 집합
                  • 연산 : a∈Array; i∈Index; item∈Element; n∈Integer인 모든a, item, n에대해여다음과같은연산이정의됨.
                    • a는 배열 이름 / i는 인덱스 / e는 원소값 / n은 배열의 크기
                    • ① Array create(n) ::= 배열의크기가n인빈배열을생성하고배열을반환한다; ② Element retrieve(a,i)::= if (i∈Index) then { 배열의i번째에해당하는원소값‘e’를반환한다; } else { 에러메시지를반환한다; } ③ Array store(a, i, e) ::= if (i∈Index) then { 배열a의i번째위치에원소값‘e’를저장하고배열a를반환한다; } else { 인덱스i가배열a의크기를벗어나면에러메시지를반환한다; }
                    • create(n) 연산 : n개의 원소를 저장할 수 있는 공백 배열을 생성
                    • retrieve(a,i) 연산 : 배열a에서 i번째에 해당하는 인덱스를 검색하여 원소값을 반환
                    • sotre(a,i,e) 연산 : 배열 a의 i번째 인덱스에 e라는 원소값을 저장하라는 연산

                  [배열의 연산의 구현]

                  • 배열의 생성(create)
                    • 배열의 매모리 공간 정의 → 반복문으로 초기값 0 저장
                  • 배열값의 검색(retrieve)
                    • 인덱스 범위 정의 → 함수이름 정의 및 매개변수 전달 → 인덱스값 유효한지 비교 → 조건 참이면 a의 i번째 값 리턴 → i값 유효하지 않으면 error
                  • 배열값의 저장(store)
                    • 인덱스 범위 정의 → 함수이름 정의 및 매개변수 전달 → 인덱스값 유효한지 비교 → 조건 참이면 a의 i번째 값에 e 저장 → i값 유효하지 않으면 error 출력
                    • a[3] = 35; 라고 a의 3번째 인덱스에 35를 대입시키면 sotre 함수 호출을 통해 값을 저장시킴

                  [1차원 배열]

                  • 한줄짜리 배열. 메모리 영역도 한줄로 할당. 배열의 원소들은 컴퓨터 메모리의 연속적 기억장소에 할당되어 순차적으로 저장.
                  • 만약 시작주소가 1 , 각 자료형 크기가 3 이라고 하면 A[3] 저장 주소는 1+3*3 = 10.

                  [배열의 확장]

                  • 2차원 배열 → 1차원 배열을 여러개 쌓아 놓은 것
                  • 행렬은 객체관의 관계, 네트워크의 시뮬레이션, 최단거리 계산 등에서 사용되는데, 행렬을 컴퓨터에서 표현하기에는 2차원 배열이 적합함.
                  • 2차원 배열애서 하나의 원소는 두개의 첨자 i(행), j(열)로 표현 ex) A[i][j]
                  • 행우선 저장 방식 : 1차원 배열을 가로로 모아 놓은 2차원 배열의 메모리 영역 할당 방법.
                    • 하나의 행을 연속적으로 메모리에 할당하고, 그 다음 행을 메모리 영역에 할당
                    • 동일한 행의 원소를 먼저 차례대로 컴퓨터 메모리에 저장하고 다음 행의 첫번째 원소부터 차례대로 저장.
                    • 코볼, 파스칼, C
                    • 0행의 값들 먼저 할당, 그다음 1행 할당
                  • 열우선 저장 방식 : 1차원 배열을 세로로 모아 놓은 2차원 배열의 메모리 영역 할당 방법
                    • 하나의 열을 연속적으로 메모리에 할당 후 다음열 메모리에 할당
                    • 동일한 열에 있는 원소를 먼저 차례대로 컴퓨터 메모리에 저장하고 다음 열로 이동하여 첫번째 원소부터 차례대로 저장
                    • 포트란
                    • 0열의 값들을 먼저 할당, 그다음 1열, 2열 할당.

                  [희소행렬의 개념]

                  • 희소행렬 : 원소값 0인 원소가 그렇지 않은 원소보다 상대적으로 많은 행렬.
                  • 0의 값을 저장하기 위해 불필요하게 많은 컴퓨터 메모리가 요구되므로, 0인 원소는 저장하지 않고 0이 아닌 값만 따로 모아 저장하는 방법 필요 —> 희소행렬의 효율적 배열 표현.
                  • 각 원소를 (행번호, 열번호, 원소값) 형태로 나타냄. : 오른쪽 그림 2차원 배열.
                  • [0,0]은 8, [0,1]은 9, [0,2]은 10
                  • [1,0]은 0(행 인덱스값), [1,1]은 1(열 인덱스값), [1,2]는 202
                • → K = a[2]; 라고 K에 a의 2번째 값을 대입시키면 retrieve 함수 호출을 통해 값 반환해서 대입시킴.
                • → ex) int a[5]; 라고 배열을 선언하면, 위의 create 연산이 호출되어 컴파일러가 배열을 생성(구현)함.
              • → K = a[2]; 라고 K에 a의 2번째 값을 대입시키면 retrieve 함수 호출을 통해 값 반환해서 대입시킴.
              • → ex) int a[5]; 라고 배열을 선언하면, 위의 create 연산이 호출되어 컴파일러가 배열을 생성(구현)함.
            • → K = a[2]; 라고 K에 a의 2번째 값을 대입시키면 retrieve 함수 호출을 통해 값 반환해서 대입시킴.
            • → ex) int a[5]; 라고 배열을 선언하면, 위의 create 연산이 호출되어 컴파일러가 배열을 생성(구현)함.
          • → K = a[2]; 라고 K에 a의 2번째 값을 대입시키면 retrieve 함수 호출을 통해 값 반환해서 대입시킴.
          • → ex) int a[5]; 라고 배열을 선언하면, 위의 create 연산이 호출되어 컴파일러가 배열을 생성(구현)함.
        • → K = a[2]; 라고 K에 a의 2번째 값을 대입시키면 retrieve 함수 호출을 통해 값 반환해서 대입시킴.
        • → ex) int a[5]; 라고 배열을 선언하면, 위의 create 연산이 호출되어 컴파일러가 배열을 생성(구현)함.
      • → K = a[2]; 라고 K에 a의 2번째 값을 대입시키면 retrieve 함수 호출을 통해 값 반환해서 대입시킴.
      • → ex) int a[5]; 라고 배열을 선언하면, 위의 create 연산이 호출되어 컴파일러가 배열을 생성(구현)함.
    • → K = a[2]; 라고 K에 a의 2번째 값을 대입시키면 retrieve 함수 호출을 통해 값 반환해서 대입시킴.
    • → ex) int a[5]; 라고 배열을 선언하면, 위의 create 연산이 호출되어 컴파일러가 배열을 생성(구현)함.
  • → K = a[2]; 라고 K에 a의 2번째 값을 대입시키면 retrieve 함수 호출을 통해 값 반환해서 대입시킴.
  • → ex) int a[5]; 라고 배열을 선언하면, 위의 create 연산이 호출되어 컴파일러가 배열을 생성(구현)함.

'책이야기' 카테고리의 다른 글

컴퓨터의 이해 8강. 정보통신기술과 우리 사회  (0) 2024.11.17
컴퓨터구조 5장  (2) 2024.11.10
스택과 큐  (0) 2024.11.03
컴퓨터 구조 1강  (0) 2024.09.01
빅데이터의 이해와 활용(1)  (0) 2024.08.18