2011-09-14 2 views
0

이전에 요청한 질문과 관련하여 특정 쿼리가있었습니다.StackType 개체에 대한 액세스 권한이없는 스택 맨 수정

이 함수 프로토 타입 void StackPop(NodeType *Top)을 받았고 스택 개체에 액세스하지 않고 스택의 맨 위에 수정을 지시했습니다. 여기서 StackPop 함수는 전역 함수이며 Stack 클래스의 멤버 함수는 아닙니다. 팝업 후, Top은 Top 요소의 새 값을 가리켜 야합니다.

해결책으로 스택을 호출하는 동안 스택 맨 위 노드의 주소를 함수에 전달하는 경우에만 스택 맨 위를 팝하는 것이 가능합니다. 예 : StackPop(&address); 스택

NodeType* temp; 
temp = top; 
*top = (*top)->next; 
delete temp; 

이 질문에 간단한 대답인가, 아니면 뭔가 다른 알아서해야하는 경우가의 상단을 수정하려면?

+0

함수 인수가 Node 또는 NodeType입니까? –

+0

@Als : Editted. 예, NodeType입니다. – Cipher

답변

0

예,이 세 가지 사항에 유의 질문에 유효한 간단한 대답입니다 :

  1. temp = toptemp = *top을 읽어야;
  2. *top이 NULL 포인터 인 경우 (NULL 포인터를 역 참조하기보다는) 정상적으로 처리하고자 할 수 있습니다.
  3. 물론이 솔루션은 Node**을 인수로 사용하기 때문에 [void StackPop(Node *Top)]이라고 표시된 프로토 타입과 호환되지 않습니다.

내가 가진 유일한 다른 말은 StackPop은 무료 함수가 아닌 멤버 함수 여야한다는 것입니다.

+0

네, 클래스 멤버 함수 라기보다 자유 함수입니다.하지만 위에서 쓴 것처럼 팝핑의 기능에 영향을 미칩니다 (최상위 노드의 주소를 전달해야한다는 사실을 무시한다면)? – Cipher

+0

@ 암호 : 아니오, 기능상의 차이는 없습니다. 틀림없이 가난한 디자인. – NPE

+0

어떤 식 으로든 프로토 타입을 수정하지 않고도 StackPop (NodeType ** 노드)으로 변경하지 않고도 가능합니까? – Cipher

관련 문제