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