c - 书本上关于链表的程序中间一段不是很懂

查看:92
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆