출처 : [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 | 스택에서 데이터를 꺼냄 |
스택에 들어있는 데이터를 화면에 출력함 | |
malloc | memory allocation 하는 함수로 메모리를 할당하고 성공하면 메모리 주소를 리턴하고 실패하면 NULL을 리턴함 |
free | malloc함수에 의해 할당된 메모리를 해제하는 함수 |
어렵네요..
며칠 전 했던 링크드 알고리즘과 비슷한 개념같은데..
'정보처리기사 Daily 문제' 카테고리의 다른 글
정보처리기사 실기 Daily 문제 19 (0) | 2021.06.02 |
---|---|
정보처리기사 실기 Daily 문제 18 (0) | 2021.06.01 |
정보처리기사 실기 Daily 문제 16 (0) | 2021.05.30 |
정보처리기사 실기 Daily 문제 15 (0) | 2021.05.29 |
정보처리기사 실기 Daily 문제 14 (0) | 2021.05.28 |