1 / 27

이 완 직 ( wjlee@pnu.ac.kr ) 2010 년 1 학기

3 장 . 배열 (array) 1 절 . 1 차원 배열의 필요성과 기본 다루기 2 절 . 1 차원 배열로 다항식 구현 3 절 . 다차원 배열의 필요성과 기본 다루기 4 절 . 희소 행렬. 이 완 직 ( wjlee@pnu.ac.kr ) 2010 년 1 학기. 1. 1 차원 배열의 필요성과 기본 다루기. 학생 5 명의 점수를 입력 받아 성적처리 변수 5 개보다는 배열로 선언하면 훨씬 효율적으로 프로그램을 작성. 1. 1 차원 배열의 필요성과 기본 다루기.

willem
Download Presentation

이 완 직 ( wjlee@pnu.ac.kr ) 2010 년 1 학기

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 3장. 배열(array)1절.1차원 배열의 필요성과 기본 다루기 2절.1차원 배열로 다항식 구현 3절. 다차원 배열의 필요성과 기본 다루기 4절. 희소 행렬 이 완 직 (wjlee@pnu.ac.kr) 2010년 1학기

  2. 1. 1차원 배열의 필요성과 기본 다루기 • 학생 5명의 점수를 입력 받아 성적처리 • 변수 5개보다는 배열로 선언하면 훨씬 효율적으로 프로그램을 작성

  3. 1. 1차원 배열의 필요성과 기본 다루기 • 선언된 배열은 각각의 원소를 개별적으로 접근 가능 • 배열 명에 첨자(색인, index)를 지정해 사용한다. • 배열로 선언된 기억공간은 메모리 할당을 연속적으로 한다. • 각 원소의 주소도 원소 하나가 차지할 기억 공간(자료형)의 크기만큼만 차이가 난다.

  4. 1. 1차원 배열의 필요성과 기본 다루기 • 선언한 배열은 int 형이기 때문에 원소의 주소값이 4바이트만큼 차이가 난다. • 포인터를 이용한 배열 접근

  5. 1. 1차원 배열의 필요성과 기본 다루기 • C언어에서 배열 명(arr)은 배열의 시작 주소값, 즉 포인터로 해석된다. • 배열 명은 포인터 상수 • 배열과 포인터의 관계 arr == &arr[0] arr+1 == &arr[0]+1 == &arr[1] arr+i == &arr[0] + i == &arr[i] *(arr+i) == *&(arr[0]+i) == *&arr[i] == arr[i]

  6. [예제 3-1] 배열 원소 총합

  7. [예제 3-2] 매개변수에서 배열과 변수의 차이

  8. 2. 1차원 배열로 다항식 구현 • 다항식은 항이 두 개 이상 있는 수나 문자의 곱으로만 이루어진 식을 말한다. • 다항식의 일반적인 형태는 다음과 같다. a(x) = 2x8 - 10x5 - 3x3 + 1 b(x) = 3x2 + 2x - 4

  9. 2. 1차원 배열로 다항식 구현 • polynomial a = {8, {2, 0, 0, 0, -10, 0, -3, 0, 0, 1}}

  10. 2. 1차원 배열로 다항식 구현 • 두 개의 다항식의 합을 구하는 addPoly() 2x8 – 10x5 – 3x3 + 1 a = {8, {2, 0, 0, 0, -10, 0, -3, 0, 0, 1}} 3x2 + 2x – 4 b = {2, {3, 2, -4}}

  11. [예제 3-3] 다항식 합 구하기

  12. 2. 1차원 배열로 다항식 구현 • 희소 다항식 • 대부분의 항의 계수가 0인 항이 많은 다항식을 생각해 보자. • 이와 같은 다항식을 희소(sparse) 다항식이라고 한다. • 예를 들어 다항식 3x1000 + x + 4는 1001개의 기억 공간 중 3개의 0이 아닌 항과 998개의 0인 항으로 이루어져 있다. • 3개만 사용되고 998개는 사용되지 않기 때문에 기억 공간의 낭비가 심해진다는 단점이 있다.

  13. 2. 1차원 배열로 다항식 구현 • 2.2 다항식에서 0이 아닌 항만 배열에 저장 3x1000 + x + 4와 같은 희소(sparse) 다항식이 다음과 같이 저장되므로 메모리 공간을 효율적으로 사용하게 된다.

  14. 2. 1차원 배열로 다항식 구현 • 두 개의 다항식 합을 구하는 함수 addPoly2()

  15. [예제 3-4] 다항식 합 구하기

  16. 3. 다차원 배열의 필요성과 기본 다루기 • 2 차원 배열 • 2차원 배열은 표와 같이 행렬구조로 데이터를 다루기 위해 사용된다. • 연속적인 저장 공간을 선언하는 배열은 1차원 배열뿐만 아니라 2차원, 3차원, 4차원,... 등 다차원으로 배열을 선언해서 사용할 수도 있다. • 2차원 배열은 2차원 배열용 자료형이 따로 있는 것이 아니므로 1차원 배열을 선언하는 형식에 첨자를 하나 더 추가하여 행과 열의 개수를 지정하면 된다. int arr[3][4];

  17. [예제 3-5] 2차원 배열 초기화 및 원소 출력

  18. 3. 다차원 배열의 필요성과 기본 다루기 • 3차원 배열 • int arr[2][3][4] = { { {1, 2, 3, 4}, • {5, 6, 7, 8}, • {9,10,11,12} }, • { {13,14,15,16}, • {17,18,19,20}, • {21,22,23,24} } • }; • 3차원 배열 선언에 대한 논리적 구조는 다음과 같다

  19. [예제 3-7] 2차원 행렬 합 구하기

  20. 4. 희소 행렬(sparse matrix) • 행렬(matrix)은 수학이나 물리학, 특히 양자역학에서 사용되는 중요한 자료구조이다. • m× n행렬은 일반적으로 m행 n열의 2차원 배열을 이용하여 표현한다.

  21. 4. 희소 행렬(sparse matrix) • 다음 행렬을 보면 많은 항들이 0으로 채워져 있다. 이러한 행렬을 희소 행렬이라고 한다. • 위의 예에서 배열의 원소 36개 중에서 실제 사용하는 것은,0이 아닌 원소를 저장하는 7개뿐 • 나머지 29개의 메모리 공간이 낭비

  22. 4. 희소 행렬(sparse matrix) • 희소 행렬 저장 방법 • 희소 행렬인 경우에는 0이 아닌 원소만 추출하여 <행, 열, 값>의 쌍으로 배열에 저장하는 방법을 사용한다.

  23. 4. 희소 행렬(sparse matrix) <행, 열, 값> 3개의 쌍을 저장하는 구조체 정의 전체 Sparse Maxtrix 구조체 정의

  24. 4. 희소 행렬(sparse matrix) • Sparse Matrix 저장 구조 • 전체 행의 개수, 전체 열의 개수, 0이 아닌 원소의 개수 저장 • 0이 아닌 원소: <행 번호, 열 번호, 원소>쌍으로 배열에 저장

  25. [예제 3-8] 희소 행렬 합

More Related