" content="[C로 배우는 쉬운 자료구조] 3장 연습문제 답안: 순차 자료구조와 선형 리스트 :: IT 복수전공 일기장" />

카테고리 없음

[C로 배우는 쉬운 자료구조] 3장 연습문제 답안: 순차 자료구조와 선형 리스트

뱌재데 2024. 5. 27. 13:34
728x90

자료구조 3장 연습문제 답안: 순차 자료구조와 선형 리스트

 

프로그램 작성 코드는 첨부 zip 파일에 있습니다

 

자료구조_3장_연습문제.zip
0.00MB

 

[3장 연습문제]

 

 

 

01. 순차 자료구조와 관련된 것은?

 

① 디스크 조각 모으기 ② 재귀호출 순환 알고리즘

③ 포인터 연결 자료구조 ④ 백신 프로그램

 

 

 

02. 선형 리스트에 대한 설명으로 틀린 것은?

 

① 선형 리스트는 메모리에 연속된 공간을 사용한다.

② 삽입 연산에 효율적이다. 선형 리스트는 접근하고 읽기 빠르지만 삽입과 삭제가 어렵다. ex) 배열 중간에 값 넣기

③ 배열을 사용해 구현하는 순차 자료구조이다.

④ 선형 리스트의 전체 원소를 순서대로 액세스하는 속도가 빠르다.

 

 

 

 

03. 선형 리스트를 L[m][n]의 2차원 배열로 구현할 때, 선형 리스트에 저장할 수 있는 원소의 최대 개수는?

 

① (m + 1) × (n + 1)개 ② (m × n)개

③ (m - 1) × (n – 2)개 ④ (m × n) + 1개

 

 

04. 선형 리스트를 구현한 2차원 배열 L[5][7]에서 L[3][2]의 물리적 주소는? (단, 원소 한 개의 크기는 4바이트이고, 행 우선 순서를 사용한다.)

 

① 0 + (3 × 7 + 2)4 ② 0 + (3 × 5 + 2)4

③ L + (3 × 7 + 2)4 ④ L + (2 × 5 + 3)4

 

05. 배열 int array[10][200]을 행 우선 순서로 저장하는 경우에 원소 array[7][12]의 시작 주소는 몇 번지인가? (단, 배열 array의 시작 주소는 10840h로, int의 크기는 4바이트로 가정한다. 배열 첨자는 0부터 시작하며 숫자에 붙은 h는 16진수 표기를 의미한다.)

 

① 10804h ② 11E50h

③ 16488h ④ 108BFh

⑤ 10A3Ch

 

06. 원소가 100개 있는 선형 리스트에서 열 번째 원소를 삭제하는 연산을 수행하였다. 원소의 이동 횟수는?

 

① 90 ② 91

③ 92 ④ 93

 

 

 

07. 3차원 배열 A(1:5, 2:4, 1:3)를 1차원 배열 B(1:45)에 행 우선으로 저장하는 경우 A(2, 3, 3)이 저장되는 B의 인덱스는?

 

① 12 ② 13

③ 14 ④ 15

 

 

 

08. 행 우선으로 저장되는 3차원 배열 a[4][5][3]이 있을 때, 이 배열의 첫 번째 원소 a[0][0][0]의 주소를 α라고 하면, a[2][3][1]의 주소를 α+i로 표현했을 때 i의 값은?

 

① 6 ② 40

③ 56 ④ 168

 

 

09. K [1: 2, 1: 3, 1: 2]로 선언된 3차원 배열을 행 우선으로 1차원 배열에 저장했을 때, 아홉 번째에 저장되는 요소는?

 

① K(1, 2, 2) ② K(1, 3, 2)

③ K(2, 2, 1) ④ K(2, 3, 2)

 

 

 

10. 행 우선 배열 A[3:6][2:7][8:12]에서 A[4][5][10]은 배열 A의 몇 번째 원소인가? (단, 첫 번째 원소는 A[3][2][8]이고 마지막 원소는 A[6][7][12]이다.)

 

① 45 ② 46

③ 47 ④ 48

 

행 우선 배열 A[3:6][2:7][8:12]에서 A[4][5][10]은

B[0:3][0:5][0:4]에서 B[1][3][2]의 위치를 구하는 문제와 같습니다.

B[1][3][2]는

B[0][5][4]까지의 배열을 채우고 (6*5 30개)

B[1][0][0]부터 B[1][2][4]까지 총 3*5개

B[1][3][0]부터 B[1][3][2]까지 총 3개 이기 때문에 4번이 정답입니다.

 

 

11. 행 우선으로 배열값을 저장하는 C 언어에서 3차원 배열 A[4][2][3]을 선언하였다. A[0][0][0]부터 A[3][1][2]에 정수값 1~24를 행 우선 순서에 따라 차례대로 저장할 때, A[2][1][2]에 저장되는 값은?

 

① 17 ② 18

③ 19 ④ 20

 
A[0]
A[1]
A[2]
1 2 3
4 5 6
7 8 9
10 11 12
A[2][0] 13 14 15
A[2][1] 16 17 18

 

 

12. 희소행렬에 대한 설명으로 옳지 않은 것은?

 

① 원소값이 대부분 0으로 구성되어 있다.

② 2차원 배열로 표현하면 특정 항목의 접근이 용이하다.

③ 연결 리스트 구조로 표현하더라도 행렬의 덧셈 연산을 할 수 있다.

④ 연결 리스트 구조로 표현하면 기억 공간이 낭비된다.

 

 

13. m × n 크기의 정수값 희소행렬을 정수형 배열에 저장하려고 한다. 가장 효과적인 저장 방법을 사용할 때, 필요한 배열 크기는? (단, t는 0이 아닌 희소행렬 원소의 개수이며, 배열 크기는 배열 원소의 수를 의미한다.)

 

① m × n ② t

③ m+n+t ④ 3(t+1)

 

 

 

14. 값이 0인 원소들의 비율이 90%인 1000 × 1000 희소행렬 표현에 관한 설명 중 옳은 것은?

 

① 2차원 배열로 모든 원소들을 표현하는 것이 저장 관점에서 효율적이다.

② 2차원 배열로 0이 아닌 원소들만 표현하기 위해서 저장 공간이 1000개 필요하다.

③ 0이 아닌 원소들만 연결 리스트로 표현하는 것이 배열로 표현하는 것보다 전치행렬 연산에 효율적이다.

④ 0이 아닌 원소들만 3원소 쌍(행의 인덱스, 열의 인덱스, 값)으로 배열에 저장하는 것이 저장 관점에서 효율적이다.

 

15. X, Y, Z는 m×n 희소행렬에서 원소값이 0이 아닌 k개의 각 원소를 표현하기 위해 <행, 열, 값> 3원소쌍을 사용하는 2차원 배열이며, 변환 규칙은 (가)와 같다. 행렬 P와 Q가 (나)와 같이 X, Y로 각각 표현되었을 때, P와 Q를 곱한 행렬 R을 Z로 표현할 경우, 이에 대한 설명으로 옳지 않은 것은? (단, 행렬의 행 번호와 열 번호는 0부터 시작한다.)

 

 

 

 

 

① Z[0][1] = 2이다. ② Z[0][2] = 4이다.

③ Z[1][0] = 0이다. ④ Z[3][2] = 2이다.

*오타 수정: ④ Z[3][2] = 3이다. -> ④ Z[3][2] = 2이다.

 

 

16. 다항식을 표현하기 위하여 다음의 구조체를 정의하였다. 다항식 A(x)=에 대해 poly.degree=n, poly.coef[i]=an-i로 표현되며, 구조체 멤버 중 degree는 다항식의 최고 차수를 저장하고 배열 coef[MAX_DEGREE]는 다항식의 최고 차수 항부터 최저 차수 항까지의 계수를 차례로 저장한다. 이때, 다항식 A(x)를 저장하기 위한 구조체 변수 poly의 선언 과정에서 다항식 100x5 + 60x를 초기화하기 위한 ㉠의 내용으로 옳은 것은?

 

 

 

 

 

① {5, {100, 1, 60}} ② {5, {100, 60, 0, 0, 0, 1}}

{5, {100, 0, 0, 0, 60, 0}} ④ {5, {100, 0, 60}}

 

 

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

7-3+1=5

5개

 

 

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

3*3+1=10

인덱스가 10=> 11번째 원소

11번째 원소

 

 

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

100+(8*8)=164

164

 

 

 

20. 다음과 같은 2차원 배열에 대해서 답하시오.

 

 

 

 
① 2차원 배열 num의 논리적 구조를 [그림 3-6]과 같이 표현하시오.

② 배열 원소 num[1][3]이 저장된 메모리 주소를 행 우선 순서 방법을 이용해 구하시오(단, 시작 주소는 1000이고, int 크기는 4바이트로 한다).

1000 + {(1x4)+3} x 4Byte = 1028

1028

 

③ 배열 원소 num[1][3]이 저장된 메모리 주소를 열 우선 순서 방법을 이용해 구하시오(단, 시작 주소는 1000이고, int 크기는 4바이트로 한다).

1000 + {(3x3)+1} x 4Byte = 1040

1040

 

21. 두 다항식을 입력 받아 다항식의 곱을 구하는 multPoly 함수를 작성하시오.

3_21_다항식곱셉.c

 

22. 다음 희소행렬의 논리적 구조를 2차원 배열을 사용해 표현하시오.

 
A =
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

 

 

 
 
ROW [0]
COL [1]
Value [2]
[0]
7
4
4
[1]
0
3
9
[2]
1
1
1
[3]
3
2
7
[4]
5
0
3

 

 

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

24. 희소행렬의 메모리 효율성을 높이기 위해 0이 아닌 원소만 뽑아 2차원 배열로 저장하는 함수를 작성하시오.

3_24_희소행렬요약.c

 

자료구조_3장_연습문제.zip
0.00MB