🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

class Stack(LinkedList) 관하여 질문 드립니다

21.10.16 22:10 작성 조회수 94

2

안녕하세요. 

class Stack(LinkedList) 부분 중 이해가 되지 않는 부분이 있어서 질문 드립니다. 글이 좀 길어질 것 같은데 차근차근 읽어 주시면 감사하겠습니다~

 

stack.push(12)

stack.push(5)

stack.push(10) 을 차례로 실행한다고 가정 했을때, 

 

stack.push(12) 실행 스텝,

-> new_node = Node(12)

-> self.head 는 모클래스 LinkedList 에서 None 으로 받았음으로, self.heald = Node(12) 로 반환 후 return 하여 함수 파트 종료.

 

다음으로 stack.push(5) 실행 스텝,

-> new_node = Node(5)

-> if 문의 self.head 는 None 이 아닌 Node(12) 이므로 if 절은 스킵. 

여기서 첫 번째 질문 드립니다. stack.push(5) 라는 것을 실행할때 LinkedList 도 자동실행되서 self.head 가 None 으로 리셋되는게 아닌지요? 어떻게 self.head 가 Node(12) 값을 계속 유지하고 있는지 궁금합니다.

-> cur_node = Node(12) 왜냐하면 self.head 는 Node(12) 이므로..

-> cur_node 포인터가 없으므로 while 문 스킵.

-> cur_node.pointer = Node(5) 로 할당. 즉, 이제부터 cur_node 는 Node(12, Node(5))

 

 

다음으로 stack.push(10) 실행 스텝,

-> new_node = Node(10)

-> if 문, 두번 째 질문입니다. 여기서 self.head 는 Node(12, Node(5)), 즉 이전 스탭의 cur_node 가 되어야 맞는 것 같은데, 어떻게 이전 스탭의 cur_node 가 현 스탭의 self.head 로 할당이 된건지 궁금합니다.

 

-> cur_node = self.head 이므로 Node(12,Node(5)) 따라서 while 문 진행.

-> cur_node = Node(5)로 할당

-> cur_node.pointer = Node(10)으로 할당.

-> cur_node 는 결국 Node(5,Node(10)) 이렇게 됨.

똑같은 질문입니다. 이때의 cur_node = Node(5, None(10)) 이것이 다음번의 self.head 가 되는 이유가 너무 궁금합니다.

 

글이 좀 복잡한데 결국 한가지 질문 같네요ㅎㅎ

답변 부탁드리겠습니다. 감사합니다~

 

 

 

답변 1

답변을 작성해보세요.

1

안녕하세요!

답변이 늦었네요 ㅠㅠ

정말 중요하고 좋은 질문입니다. 의문점들 반드시 이해하고 넘어가시는 것을 추천드립니다.

1. self.head 변수는 Stack의 인스턴스인 stack 공간에 저장됩니다. (Stack 클래스는 LinkedList를 상속받았으므로) 따라서 slef.head는 stack 인스턴스 안에서 초기화를 하거나 새로운 값을 저장하지 않는 이상 stack 안에서 계속 메모리에 남아 있습니다. 당연하게도 stack2 = Stack( ) 으로 새로운 인스턴스를 찍어내면 해당 stack2의 self.head는 None으로 초기화됩니다. 이 상황에서도 stack 인스턴스 안의 self.head는 stack 인스턴스만의 공간에서 잘 보존되어 있겠죠. stack.push 를 하는 순간에서도 기존에 stack 인스턴스 공간 안에서 head 값을 찾고 해당 head 값으로 로직이 수행되는 것입니다.

 

2, 3. 이전 스텝에서 cur_node = self.head 로직이 수행되는 순간 cur_node는 self.head의 값인 Node(12)가 그대로 들어가는 것이 아니라 Node(12)의 메모리 주소값이 들어갑니다. 즉, 엄밀히 말하면, cur_node 변수는 Node(12)를 가리키게 되는 것이죠. (엄밀하게 self.head 또한 Node(12)를 가리킨 상태였던 것입니다.) 따라서 cur_node.pointer = new_node 를 하는 순간, (new_node == Node(5)) cur_nore는 Node(12)를 가리키므로 Node(12)의 poiner에 Node(5)가 들어갑니다. 그런데 self.head 또한 Node(12)를 가리키고 있으므로 self.head가 가리키는 Node(12)의 pointer가 Node(5)가 되어 결론적으로 self.head == Node(12, Node(5))가 되는 것입니다.

 

변수의 주소와 할당에 대한 개념입니다. 아주 중요하면서 헷갈리는 개념이죠. 이해가 안되시면 답글 남겨주세요!

좋은 질문 감사합니다.

채널톡 아이콘