c语言,设备信息的链表排序怎么处理?

如何将输入后的根据编号大小进行排序,就是排完序后再写入文档?

void addEquipment(Equipment *head){
    Equipment *tail = head;
    int k,len;
    printf("键入需要录入设备的个数:");
    scanf("%d",&len);
    printf("\n");
    for ( k = 0; k< len; k++)
    {
    while(tail->next!=NULL) tail = tail->next;
    Equipment *newnode = (Equipment*)malloc(sizeof(Equipment));
    printf("请输入设备编号:");
    scanf("%d",&newnode->num);
    if(checkNum(head,newnode->num)){
        printf("输入编号已有,输入失败!");
        return;
    }
    printf("请输入设备名称:");
    scanf("%s",&newnode->name);
    printf("请输入设备型号:");
    scanf("%s",&newnode->model);
    printf("请输入生产厂家:");
    scanf("%s",&newnode->factory);
    printf("请输入设备购买日期:");
    scanf("%s",&newnode->buy_date);
    printf("请输入保质期:");
    scanf("%s",&newnode->baozhqi);
    printf("请输入责任人:");
    scanf("%s",&newnode->zrr);
    printf("请输入价格:");
    scanf("%s",&newnode->price); 
    tail->next = newnode;
    newnode->next = NULL;
}
    fprintE(head);
    printf("录入成功!");
    printf("\n");
}

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7471303
  • 这篇博客你也可以参考下:C语言中,定义局部变量时如果未初始化,则值是随机的,为什么?
  • 除此之外, 这篇博客: C语言回文串中的 对于单独的字符串,可用以上所述进行判断,对于需要连续判断的回文数,应该怎么做呢? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 例如:请输出1000~10000的回文数。

    • 想想要是把每一个数都进行字符数组存储,然后转置,在进行判断是否为回文数,那么这个算法的复杂度就超出我们想象了。
    • 于是我们提出了逆数处理(就是把这个数反向表达,如123 转换为321,其实也是逆置的思想)

    下面来看看具体如何做吧~~~~~

  • 您还可以看一下 谢昆明老师的C语言项目:图书管理系统课程中的 查看、修改变量的值小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    需要使用特定的排序算法来对设备信息的链表进行排序,通常使用的是冒泡排序、快速排序、选择排序等算法。其中,冒泡排序和快速排序在C语言中应用最广,选择排序相对来说效率较低,在实际开发中较少使用。

    下面以冒泡排序为例,给出具体的解决方案和示例代码:

    1.先定义链表结构体,包括设备编号和指向下一节点的指针:

    typedef struct deviceInfo
    {
        int number;                       //设备编号
        struct deviceInfo *nextDevice;    //指向下一节点的指针
    }DEVICEINFO, *PDEVICEINFO;
    

    2.编写冒泡排序函数bubbleSort,对链表中的设备编号进行排序:

    void bubbleSort(PDEVICEINFO headDevice)
    {
        int flag = 1;                       //flag为标志位,用来判断是否结束排序
        PDEVICEINFO p, q;
        p = headDevice;                     //用指针p来遍历链表
        int temp = 0;
    
        if (headDevice == NULL || headDevice->nextDevice == NULL)
        {
            return;
        }
    
        while (flag)
        {
            flag = 0;
            p = headDevice;
            q = headDevice->nextDevice;
            while (q != NULL)               //遍历链表
            {
                if (p->number > q->number)  //交换两个节点的位置
                {
                    temp = p->number;
                    p->number = q->number;
                    q->number = temp;
                    flag = 1;
                }
                p = p->nextDevice;
                q = q->nextDevice;
            }
        }
    }
    

    3.在主函数中构造链表,读取设备编号,并调用bubbleSort来对链表进行排序,最后将排序后的链表写入文档:

    int main()
    {
        PDEVICEINFO headDevice = NULL;
        PDEVICEINFO p, q;
        int number = 0;
    
        printf("请输入设备编号,输入-1结束:\n");
        while (number != -1)          //构造链表
        {
            scanf("%d", &number);
            if (headDevice == NULL)
            {
                headDevice = (PDEVICEINFO)malloc(sizeof(DEVICEINFO));
                headDevice->number = number;
                headDevice->nextDevice = NULL;
                p = headDevice;
            }
            else
            {
                q = (PDEVICEINFO)malloc(sizeof(DEVICEINFO));
                q->number = number;
                p->nextDevice = q;
                q->nextDevice = NULL;
                p = q;
            }
        }
    
        bubbleSort(headDevice);       //调用冒泡排序函数
    
        FILE *fp = fopen("deviceInfo.txt", "w");    //打开文件
        if (fp == NULL)
        {
            printf("文件打开失败!\n");
            return 0;
        }
        p = headDevice;
        while (p != NULL)             //遍历链表并将设备编号写入文件中
        {
            fprintf(fp, "%d\n", p->number);
            p = p->nextDevice;
        }
        fclose(fp);                   //关闭文件
        return 0;
    }