c - 书本上关于链表的程序中间一段不是很懂
本文介绍了c - 书本上关于链表的程序中间一段不是很懂的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
程序是一个零件数量数据库,这是其中insert的code
void insert (void){
struct part *cut, *prev, *new_node;
new_node = malloc(sizeof(struct part));
if (new_node == NULL){
printf("Database is full\n");
return;
}
printf("Enter part number:");
scanf("%d",&new_node->number);
for(cur = inventory, prev = NULL;
cur != NULL && new_node->number > cur->number;
prev = cur, cur = cur->next);
if(cur != NULL && new_node->number == cur->numebr){
printf("part already exist\n");
free(new_node);
return;
}
printf("Enter part name:");
read_line(new_node->name,NAME_LEN) //读取名字
printf("Enter quantity on hand:");
scanf("%d",&new_node->on_hand);
new_node->next = cur;
if(prev == NULL)
inventory = new_node;
else
prev->next=new_node;
}
其中这一段不是很理解
for(cur = inventory, prev = NULL;
cur != NULL && new_node->number > cur->number;
prev = cur, cur = cur->next);
if(cur != NULL && new_node->number == cur->numebr){
printf("part already exist\n");
free(new_node);
return;
}
这一段在第一次(第一个数据录入)时直接跳过,第二次后就不是很理解了cur != NULL && new_node->number > cur->number;
这部分的作用是什么?
解决方案
为了保证链表有序吧。当新的number小于等于当前的number时停止循环,然后在前面插播入新的node,因为当前number大于前一项(如果有的话)。这样能保证链表是从小到大排列的。
这篇关于c - 书本上关于链表的程序中间一段不是很懂的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文