10845번 - 큐
한번 push를 해서 값을 넣고, pop으로 모든 원소를 빼낸 뒤, push를 하면 정상작동을 안하네요 이유가 궁금합니다
무슨뜻인가요??
반복문 처음에 Q.SLinkedQueue();
반복문 끝에 Q.~SLinkedQueue();
되는 게 이상한 게 아닐까요?
입력을 받고 head와 tail을 변경했는데,
반복문 마지막에 다 NULL로 바껴요.
Q.~SLinkedQueue();를 지워도 달라지지 않아요
아아 이해했어요 감사합니다
이미지를 참고해 주시기 바랍니다.
또한 pop()에서 런타임 에러가 발생하니, 이 또한 약간 수정하셔야 할 듯하네요.
어... 그러네요 뭐가문제지;;
void push함수 안의 if(tail==NULL)을 if(head==NULL)으로 바꾸니 correct뜨긴 하는데이유가 궁금합니다!!!
pop() 함수를 계속 호출하여 head와 tail이 가리키는 게 같아졌다고 가정해보죠.
그 상태에서 만약 pop()를 호출하게 되면,
head는 head->next가 되는데, 이 때 head->next는 NULL입니다.
하지만 tail은 다릅니다.
tail이 가리키는 값이 delete 된다고 해도, tail이 가리키는 건 NULL이 아닙니다.
그래서 push()에서 head==NULL이라고 조건을 붙이면 실행이 되지만,
tail==NULL이라고 조건을 붙이면 실행이 되지 않습니다.
그래서 보통 저런 경우엔 delete를 한 후, 해당 값을 가리키던 포인터가 있다면 그것을 NULL로 바꿔줘야 해요.
항상 감사합니다!!
댓글을 작성하려면 로그인해야 합니다.
12161542 4년 전
한번 push를 해서 값을 넣고, pop으로 모든 원소를 빼낸 뒤, push를 하면 정상작동을 안하네요 이유가 궁금합니다