如何将输入后的根据编号大小进行排序,就是排完序后再写入文档?
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");
}
例如:请输出1000~10000的回文数。
下面来看看具体如何做吧~~~~~
需要使用特定的排序算法来对设备信息的链表进行排序,通常使用的是冒泡排序、快速排序、选择排序等算法。其中,冒泡排序和快速排序在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;
}