하나의 정수가 들어있는 구조체를 기반으로 링크 된 노드의 머리에 새 노드의 숫자를 추가하는 함수를 만들도록 요청하는 연습 문제가 있습니다. 이것은 구조체입니다.링크 된 목록에 노드 삽입하기
struct Node
{
int data;
struct Node *next;
};
지금까지는 문제가 없습니다. 그래서 2 개의 인자를 취한 함수를 만들었습니다. 덧붙일 정수와 연결된리스트의 머리 부분에 대한 포인터입니다.하지만 작동하지 않았습니다.
void push(struct Node* head, int new_data)
{
struct Node* new_node = (struct Node*) malloc(sizeof(struct Node));
new_node->data = new_data;
new_node->next = head;
head = new_node;
}
그럼, 내가 한 것은 내가 그 후 나는 새 노드를 연결리스트의 새로운 머리를 만들어, 머리가 가리키는 동일한 노드에 new_node 포인트를 만든 것입니다 : 이것은 내 코드입니다 . 그것이 작동하지는 않지만 매우 논리적 인 것처럼 보입니다.
:void push(struct Node** head_ref, int new_data)
{
/* 1. allocate node */
struct Node* new_node = (struct Node*) malloc(sizeof(struct Node));
/* 2. put in the data */
new_node->data = new_data;
/* 3. Make next of new node as head */
new_node->next = (*head_ref);
/* 4. move the head to point to the new node */
(*head_ref) = new_node;
}
이 두 번 **와 함수에 대한 주요이다 : 나는 머리의 ADRESS에게 기능을 대신 포인터 자체의 포인터를 줄 때 다른 한편으로, 그것은 작업을 수행
int main()
{
struct Node* head = NULL;
push(&head,7);
push(&head,6);
push(&head,3);
return 0;
}
나는 두 번째 기능이 작동한다는 것을 이해하지만, 머리의과 주소하지 머리 자체를 사용할 필요가 왜 표시되지 않습니다. 아무도 나에게 그 이유를 설명 할 수 있다면 기뻐할 것이다. 고마워.
C++에서 [컨테이너]있다 (http://en.cppreference.com/w/cpp/container). – Ron
1) [std :: list] (http://en.cppreference.com/w/cpp/container/list) & [std :: forward_list] (http://en.cppreference.com/w/cpp/) container/forward_list) 이미 있습니다 - * 사용하십시오 *. 2) 연결된 목록은 대개 현대 컴퓨터의 끔찍한 * 데이터 구조입니다. [std :: vector] (http://en.cppreference.com/w/cpp/container/vector)는 거의 항상 더 나은 선택입니다. –
언어를 선택하십시오 C 또는 C++ – PaulMcKenzie