나는 링크 된 목록에 초보자입니다. 나는 링크의 크기를 터미널에서 취한 후 모든 데이터를 freq에 보관할 수있는 상황을 가지고 있습니다 (내 코드에서 "freq"이지만 일반적으로 data/info라고 함). 그리고이를 사용하여 연결된 목록을 만듭니다. .링크 된 목록의 다른 노드를 연결하고 그것을 트래버스하는 방법
내가 지금까지해온 코드는 작성 될 LL의 크기를 읽고 입력 된 각 데이터에 대한 노드를 만드는 코드에 아래에 나와 있습니다. 이제 어떻게 요소가 처음에 다른 노드가 NULL을 가질지를 가리 키도록 노드를 연결해야합니다. 지금은 각 노드의 다음에 NULL이 있습니다.
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include <string.h>
struct node
{
int freq;
struct node *next;
};
typedef struct node node;
node *tree=NULL;
main()
{
int size,data;
printf("enter the size of node\n");
scanf("%d", &size);
printf("start entering the number of elements until your size\n");
node *prev;
node *temp;
prev = NULL;
do
{
scanf("%d\n", &data);
temp = (node*)malloc(sizeof(node));
temp->freq=data;
temp->next=NULL;
if (prev)
prev->next = temp;
else
tree = temp;
prev = temp;
size--;
}
while(size>0);
node *temp1;
temp1=temp;
while(temp1->next!=NULL)
{
printf("%d-> ",temp->freq);
temp1=temp1->next;
}
}
케 (1) :
여기 내 코드는 내가 터미널에서 촬영이 노드를 연결하는 시도했지만 여전히 이송 된 링크 목록을 인쇄하지 않습니다. 어디에 문제가 있습니까?
The output is:
[email protected]:~/Desktop/Internship_Xav/Huf_pointer$ ./ll
enter the size of node
4
start entering the number of elements until your size
22
11
4
5
6//It don't print the linked list here
[email protected]:~/Desktop/Internship_Xav/Huf_pointer$
감사합니다. 적용 해 보겠습니다. 그럼 내가 너에게 돌아올거야.:) – Sss
나는이 줄을 다시 설명 할 수있는 줄을 이해할 수 없었다. "(이전) prev-> next = temp; else tree = temp; prev = temp;" 또한 "prev"노드를 사용해야하는 이유는 무엇입니까? – Sss
@ user234839'tree'에 대한 초기화를 제공합니다. 'if (prev)'는 "이것이 우리가 여기 처음있는 것이 아닌 경우"를 의미합니다. - 그 경우 이전 노드'next' (즉'prev-> next ')를 새로운 노드로 업데이트합니다. 'temp'). 그렇지 않으면 ('prev'는 NULL을 처음으로 쓰는 것입니다.)'tree'를'temp'로 초기화합니다. 왜냐하면 이것은 목록의 머리가 될 것이기 때문입니다. 그리고 나서, 어느 경우 든, 우리는 항상'prev = temp;'를 실행합니다. 왜냐하면'temp'가 이제 다음 반복의 이전 노드이기 때문입니다. 'prev = temp;'는 다음 반복을위한 코드를 준비합니다. –