C 链表查询

C 链表查询,c,data-structures,C,Data Structures,我有一个单链表: #include <stdio.h> #include <stdlib.h> struct list_el { int val; struct list_el * next; }; typedef struct list_el item; int main() { item * curr, * head; int i, num_nodes; head = NULL; printf("Enter the numbe

我有一个单链表:

#include <stdio.h>
#include <stdlib.h>
struct list_el {
   int val;
   struct list_el * next;
};

typedef struct list_el item;

int main() {
   item * curr, * head;
   int i, num_nodes;

   head = NULL;
   printf("Enter the number of nodes to be created: ");
   scanf("%d", &num_nodes);
   for(i=1;i<=num_nodes;i++) {
      curr = (item *)malloc(sizeof(item));
      printf("\n Enter the value :");
      scanf("%d", &curr->val);
      curr->next  = head;
      head = curr;
   }

   curr = head;

   while(curr) {
      printf("%d --> ", curr->val);
      curr = curr->next ;
   }
   getch();
   return 0;
}
#包括
#包括
结构列表{
int-val;
结构列表_el*下一步;
};
类型定义结构列表项;
int main(){
项目*curr,*head;
int i,num_节点;
head=NULL;
printf(“输入要创建的节点数:”);
scanf(“%d”、&num_节点);
对于(i=1;ival);
当前->下一步=头部;
水头=电流;
}
curr=头;
while(curr){
printf(“%d-->”,curr->val);
当前=当前->下一步;
}
getch();
返回0;
}
线urr=头部是什么;意思是
此外,在打印时,if会反向打印链接列表。为什么会这样?我想这是因为我们用上述语句将最后一个节点指定为curr?如果是,则curr->next如何在while(curr)循环中工作?

curr=head
表示您的
curr
指针将指向与
head
指针相同的节点。然后使用
curr
作为迭代器,并在列表中的项目上运行(在
while
循环中)

它以相反的方式打印,因为项目添加在以下行中列表的开头:

curr->next  = head;
head = curr;
编辑:更改向列表中添加项目的方式,以便将项目添加到列表末尾:

 item *tempPointer = NULL;
 for(i=1;i<=num_nodes;i++) {
      curr = (item *)calloc(sizeof(item));         
      printf("\n Enter the value :");
      scanf("%d", &curr->val);
      if (i == 1) 
        head = curr;
      else {     
        tempPointer ->next  = curr;
      }      

      tempPointer = curr;
   }
item*tempPointer=NULL;
对于(i=1;ival);
如果(i==1)
水头=电流;
否则{
tempPointer->next=curr;
}      
tempPointer=curr;
}

curr=head
表示您的
curr
指针将指向与
head
指针相同的节点。然后使用
curr
作为迭代器,并在列表中的项目上运行(在
while
循环中)

它以相反的方式打印,因为项目添加在以下行中列表的开头:

curr->next  = head;
head = curr;
编辑:更改向列表中添加项目的方式,以便将项目添加到列表末尾:

 item *tempPointer = NULL;
 for(i=1;i<=num_nodes;i++) {
      curr = (item *)calloc(sizeof(item));         
      printf("\n Enter the value :");
      scanf("%d", &curr->val);
      if (i == 1) 
        head = curr;
      else {     
        tempPointer ->next  = curr;
      }      

      tempPointer = curr;
   }
item*tempPointer=NULL;
对于(i=1;ival);
如果(i==1)
水头=电流;
否则{
tempPointer->next=curr;
}      
tempPointer=curr;
}

按照问题的顺序:

什么是
curr=head平均值

这意味着获取指针变量
head
中保存的地址,并将其存储在指针变量
curr
中。它与按值复制任何其他类型没有区别,例如
inta=1,b;b=a

(它)反向打印链接列表。为什么会这样

添加每个新项目时,该新项目将成为列表的标题。因此,如果按特定顺序输入数字,最后一个将是列表中的第一个,第一个将是最后一个。这种类型的结构通常称为后进先出(后进先出)


如果您希望列表实际按照输入的顺序排列,而无需每次插入都扫描到列表的末尾,这是一种方法(imho是最有效的方法):

输出

Enter the number of nodes to be created: 5

 Enter the value :1

 Enter the value :2

 Enter the value :3

 Enter the value :4

 Enter the value :5
1 --> 2 --> 3 --> 4 --> 5 -->

按提问顺序:

什么是
curr=head平均值

这意味着获取指针变量
head
中保存的地址,并将其存储在指针变量
curr
中。它与按值复制任何其他类型没有区别,例如
inta=1,b;b=a

(它)反向打印链接列表。为什么会这样

添加每个新项目时,该新项目将成为列表的标题。因此,如果按特定顺序输入数字,最后一个将是列表中的第一个,第一个将是最后一个。这种类型的结构通常称为后进先出(后进先出)


如果您希望列表实际按照输入的顺序排列,而无需每次插入都扫描到列表的末尾,这是一种方法(imho是最有效的方法):

输出

Enter the number of nodes to be created: 5

 Enter the value :1

 Enter the value :2

 Enter the value :3

 Enter the value :4

 Enter the value :5
1 --> 2 --> 3 --> 4 --> 5 -->

逐行浏览代码,看看它真正的功能(如果您不能理解这个非常简单的代码)。或者,最好先在纸上写下来!你是从哪里复制代码的?一行一行地浏览代码,看看它真正的功能(如果你不能理解这个非常简单的代码)。或者,最好先在纸上写下来!你是从哪里复制代码的?我如何从头到尾打印代码?你能帮忙吗?我怎么把它从头到尾打印出来?你能帮忙吗?