안녕하세요, 여행벌입니다.

C언어로 쉽게 풀어쓴 자료구조 7장 - 연결리스트2 연습문제 풀이입니다.

틀린 부분이나 궁금하신 부분은 편하게 댓글에 남겨주세요!

7장연습문제풀이.zip
0.00MB

 

안녕하세요, 여행벌입니다.

C언어로 쉽게 풀어쓴 자료구조 6장 - 연결리스트1 연습문제 풀이입니다.

01 ~ 08 번은 손으로 09 ~ 24번은 직접 코드 구현으로 문제를 해결했습니다.

틀린 부분 혹은 이해가 안가시는 부분은 같이 댓글로 얘기해봐요!

6장연습문제.zip
0.45MB


[ 9번 ]

책의 insert와 다르게 insert된 Node를 연결리스트 제일 뒤에다가 붙이고 출력하면 입력한 순서대로 저장할 수 있습니다.

 

[ 10번 ]

연결리스트를 head부터 순회하며 count 해주면 됩니다.

 

[ 11번 ]

10번과 마찬가지로 head부터 순회하며 sum 해주면 됩니다.

 

[ 12번 ]

head부터 순회하며 특정 데이터를 count 해주면 됩니다.

 

[ 13번 ]

head부터 순회하며 특정 데이터를 찾고 그 부분을 책과 같이 remove 해주면 됩니다.

 

[ 14번 ]

Node에 이름, 나이, 키를 담을 수 있게 구조체를 새롭게 선언해주면 됩니다.

기타 다른 연산은 책과 동일하게 진행하면 되므로 생략하겠습니다.

 

[ 15번 ]

연결리스트를 head부터 순회하며 min, max 값을 저장하고 return 해주면 됩니다.

 

[ 16번 ]

먼저, 첫 번째 데이터를 삭제하고 그 뒤부터 한 칸씩 건너뛰며 삭제하면 됩니다.

연습문제 중에 가장 해결하기 까다로웠던 것 같습니다.

 

[ 17번 ]

연결리스트 A, B의 노드들을 똑같이 번갈아가며 새로운 연결리스트에 삽입해주면 됩니다.

 

[ 18번 ]

연결리스트 A, B의 노드들을 앞에서부터 순회하며 더 작은 값을 새로운 연결리스트에 삽입해주면 됩니다.

 

[ 19번 ]

연결리스트 C를 순회하며 flag 변수를 이용해 하나씩 번갈아가며 A, B에 노드를 삽입해주면 됩니다.

 

[ 20번 ]

책에도 자세히 나와있는 코드로 설명을 생략하겠습니다.

 

[ 21번 ]

값 x가 들어오면 expon만큼 x를 곱해서 x^expon을 만들고 거기에 coef를 곱해주며 sum하면 됩니다.

 

[ 22번 ]

배열을 이용해서 리스트를 구현하면 됩니다.

 

[ 23번 ]

앞에서 다루던 연결리스트 함수들을 조금씩만 수정해주면 됩니다.

 

[ 24번 ]

희소행렬은 14번과 마찬가지로 구조체만 새롭게 선언해주면 구현하는데 큰 어려움이 없습니다.

구조체만 코드로 표현했습니다.


 

안녕하세요, 여행벌입니다.

C언어로 쉽게 풀어쓴 자료구조 5장 - 큐 연습문제 풀이입니다.

01 ~ 07 번은 손으로 08 ~ 11번은 직접 코드 구현으로 문제를 해결했습니다.

12번은 생략했습니다.

틀린 부분은 같이 댓글로 얘기해보면 좋을 것 같습니다!

5장연습문제풀이.zip
0.39MB


[ 8번 ]

원형큐이기 때문에, front와 rear가 역전된 상황만 따로 처리해주면 됩니다.

 

[ 9번 ] 

문제에서 하라는 대로 Stack을 2개 이용해서 Queue를 구현하면 됩니다.

 

[ 10번 ]

원형큐를 이용해서 적은 메모리로도 피보나치수열을 구현할 수 있습니다.

물론, int 형 범위를 넘어가는 수에 대해서는 오버플로우에 의해 이상한 값이 출력됩니다.

 

[ 11번 ]

덱을 책에서처럼 연결리스트로 구현하지 않고, 원형큐를 이용해서 구현해보았습니다.

안녕하세요, 여행벌입니다.

C언어로 쉽게 풀어 쓴 자료구조 4장 - 스택 연습문제 풀이입니다.

01 ~ 09 번은 손으로 10 ~ 16번은 직접 코드 구현으로 문제를 해결했습니다.

틀린 부분은 같이 댓글로 얘기해보면 좋을 것 같습니다!

4장연습문제풀이.zip
0.89MB


[ 10번 ]

Stack은 LIFO 구조로 입력이 들어오는 순서대로 Push 한 다음에, Pop을 하면서 출력하면 반대로 출력이 됩니다.

 

[ 11번 ]

Stack을 활용한 괄호 짝 찾기 문제의 활용 버전으로 ' ( ' 를 만나면 Stack에 Push하고 ' ) ' 를 만나면 Stack의 Top 에 있는 ' ( ' 와 짝을 맺어준다.라는 기본 개념을 이용하면 됩니다.

' ( ' 마다 차례대로 번호를 부여하며 Stack 에 Push 하고 '  ) ' 를 만나면 Stack의 top이 지금 만난 ' ) '와 짝인 ' ( ' 이므로 ' ( ' 의 번호를 출력하며 Pop을 진행하면 됩니다.

 

[ 12번 ]

왜... 스택을 이용해야 되는지 이해할 수 없는 문제지만... 억지로 스택을 사용해보았습니다.

Input으로 들어온 문자 배열을 맨 앞에서부터 순회할 것입니다.

1. 내가 가리키고 있는 문자 now에서 대/소문자가 now와 같은 경우까지 문자 배열을 순회하며 count해준다.

2. now와 다른 문자가 나오면 지금까지의 count와 now를 Stack1에 Push해줍니다.

( 이때, 대문자면 소문자로 바꿔서 Push해줍니다. )

3. 문자 배열 순회가 끝났으면 Stack1에 저장된 원소들을 Pop하며 Stack2에 Push 해줍니다.

( 역순 출력을 위해서 )

4. Stack2를 Pop하며 출력합니다.

 

[ 13번 ]

이 문제도... 왜 스택을 이용해야 되는지 이해할 수 없는 문제다.

12번과 마찬가지로 Input으로 들어온 문자 배열을 맨 앞에서부터 순회하며 Stack1에 저장하고,

Stack1에 저장된 값들을 Pop하며 Stack2에 다시 저장해 출력을 하면 된다.

 

[ 15번 ]

좌표를 저장해 줄 element 를 선언하고 element 배열에 경로를 저장해나가면 된다.

 

[ 16번 ]

Stack에 문자 배열을 입력하고 Pop을 하면 문자배열을 역순으로 참조할 수 있다.

Stack에 문자배열을 소문자, 대문자를 다 소문자로 입력하고 문자배열을 순회하며 Stack이랑 비교하면 된다.

 

+ Recent posts