본문 바로가기

정보처리기사 Daily 문제

정보처리기사 실기 Daily 문제 17

출처 : [2021년 제2회 기사 실기 출제예상 문제] (6과목) 프로그램밍 언어 활용 - 65 : 네이버 카페 (naver.com)

다음은 링크드 리스트를 이용하여 스택을 구현한 프로그램이다. 밑줄에 들어갈 키워드를 쓰시오.`

tyepdef struct node {

int data; //저장 데이터

struct node *next; // 노드의 다음 주소를 저장할 포인터 변수

}Node;

void push(Node *head, int data) {

Node *end = (Node *)malloc(sizeof(Node)); //malloc 함수를 이용하여 메모리 할당하여 노드를 하나 생성

end -> ____(1)____ = head->next; // head의 next 값을 end의 end의 next에 대입함

end -> data = data; // 매개변수로 전달받은 data를 end의 data에 대입함

head -> next = end; // end의 주소값을 head의 next에 대입합

}

int pop(Node *head) {

int a;

Node *del = head -> next; // 노드를 삭제하기 전 head의 next를 del에 대입함

head -> next = del -> next; // del의 next를 head의 next에 대입함

a = del -> data; // del의 data를 a에 대입함

free(____(2)____); // free함수를 이용하여 del을 메모리에서 해제하여 노드를 제거함

return a;

}

void print(Node *head) {

Node *tmp = head -> next; //head의 next를 tmp에 대입함

while(tmp != NULL) { // tmp가 NULL이 아니면 반복을 수행함

printf("%d", tmp->data); // tmp의 data를 화면에 출력함

____(3)____ = tmp -> next; // tmp의 next를 tmp에 대입함

}

}

int main(int argc, char *argv[]) {

int r = 10;

int i = 0;

 

Node *head = (Node *)malloc(sizeof(Node)); //head를 malloc하여 생성함

head -> data = 0; //head의 data에 0을 대입함

head -> next = NULL; // head의 next에 NULL을 대입함

for(i=0; i<10l i++) { // i값은 0부터 10보다 작을 때 까지 1씩 증가하며 반복함

push(haed, i); // i 값을 스택에 push 함

}

printf("push data : ");

print(head); // 스택의 내용을 보여줌

printf("\n");

 

r = pop(head); // 스택에서 데이터를 pop하여 r에 대입함

printf("pop data : %d\n", r); // pop한 데이터인 r을 화면에 출력함

 

printf("statck data : ");

print(head); // 스택의 내용을 보여줌

 

return 0;

}

정답

(1) next

(2) del

(3) tmp

함수명 내용
push 스택에 데이터를 넣음
pop 스택에서 데이터를 꺼냄
print 스택에 들어있는 데이터를 화면에 출력함
malloc memory allocation 하는 함수로 메모리를 할당하고 성공하면 메모리 주소를 리턴하고 실패하면 NULL을 리턴함
free malloc함수에 의해 할당된 메모리를 해제하는 함수

어렵네요..

며칠 전 했던 링크드 알고리즘과 비슷한 개념같은데..