본문 바로가기

Book

[한빛미디어] C로 배우는 쉬운 자료구조 (연습문제 4장)



4장 연습문제

1. 8개의 원소가 있는 선형 리스트에서 3번 자리에 새로운 원소를 삽입하려면 몇 개의 원소를 옮겨야 하는가?

답 안

n - k + 1 = 7 + 3 - 1 = 5

2. 선령 리스트 A를 C 프로그램에서 2차원 배열 A[5][3]으로 표현했을 때 A[3][1] 원소는 몇 번째 원소인가?

답 안

I * nj + j = 3 * 3 + 1 = 10 , 인덱스가 10이므로 11번째 저장원소

ex)

3. 시작 위치가 100번지고, 원소의 길이가 5바이트인 선형 리스트가 행 우선 순서 방법으로 저장되어 있을 때 9번째 원소의 주소는 얼마인가?

답 안

시작주소 + (인덱스 * 바이트 ) = 100 + 8 * 5 = 140

4. 다음 행렬에 대한 전치 행렬을 구하시오.

답 안

소스)

#include<stdio.h>

#define ROW 3

#define COL 4

void trans_array(int (*a)[COL]);

int main(void)

{

int a[3][4]={1,3,5,7,5,7,9,4,4,9,5,9};

int i,j;

puts(" ==== 기본 행렬 ==== ");

for(i=0;i<3;i++)

{

for(j=0;j<4;j++)

printf("%4d", a[i][j]);

printf("\n");

}

trans_array(a);

return 0;

}

void trans_array(int (*a)[COL])

{

int i,j;

printf("\n ==== 전치 행렬 ==== \n");

for(i=0;i<COL;i++)

{

for(j=0;j<ROW;j++)

printf("%4d", a[j][i]);

printf("\n");

}

}

4. 다음 희소 행렬을 2차원 배열의 논리적 구조로 표현하시오.

답 안

소스)

#include<stdio.h>

#define ROW 7

#define COL 4

void sparse_array(int (*a)[COL], int count);

int main(void)

{

int a[ROW][COL]={{0, 0, 0, 9},

{0, 1, 0, 0},

{0, 0, 0, 0},

{0, 0, 7, 0},

{0, 0, 0, 0},

{3, 0, 0, 0},

{0, 0, 0, 0},

};

int i, j, count=0;

printf(" ==== 기본 행렬 ====\n");

for(i=0;i<ROW;i++){

for(j=0;j<COL;j++){

printf("%4d",a[i][j]);

if(a[i][j] !=0)

count++;

}

printf("\n");

}

sparse_array(a,count);

}

void sparse_array(int (*a)[COL], int count)

{

int i,j;

printf("\n====희소 행렬====\n");

printf("%d\t%d\t%d\n\n", ROW, COL, count);

for(i=0;i<ROW;i++)

for(j=0;j<COL;j++)

if(a[i][j] !=0)

printf("%d\t%d\t%d\n",i,j,a[i][j]);

}