gpt4 book ai didi

c - 对列表中的数字进行排序/C

转载 作者:行者123 更新时间:2023-11-30 17:35:16 25 4
gpt4 key购买 nike

我需要对列表中输入的数字进行排序,但我做错了一些事情,它对除第一个数字之外的所有数字进行排序。有什么想法如何解决这个问题吗?

这是我的代码:

    #include <stdio.h>
#include <stdlib.h>

struct node
{
int data;
struct node *next;
};
struct node* List;

void Add (struct node* p, int d)
{
struct node* q;
q=malloc(sizeof(struct node));
if (q==NULL)
printf("Not enaugh memory!");
else
{
q->data=d;
if(List==NULL)
{
q->next=NULL;
List=q;
}
else
{
struct node *ptr=List;
while((ptr->next!=NULL)&&(ptr->next->data>d))
{
ptr=ptr->next;
}
q->next=ptr->next;
ptr->next=q;

}
}
}


int main()
{
int n,i,a;
printf("How much numbers are you going to enter? ");
scanf("%d",&n);
for (i=1; i<=n; i++)
{
printf("\nEnter a number: ");
scanf("%d",&a);
Add(List,a);
}
printf("\nThe sorted numbers are: ");
struct node *ptr=List;
while(ptr!=NULL)
{
printf("%d\t",ptr->data);
ptr=ptr->next;
}
printf("\n\n");
system("PAUSE");
return 0;
}

感谢您提前提供的帮助:-)

最佳答案

在add()函数中,

if(List==p)

此语句对于您插入到列表中的所有元素都成立,因为对 add 的调用是,

Add(List,a);

所以p=列表。因此else部分编写的排序代码不会被执行。
还添加语句来检查初始列表是否为空。
您可以使用与此类似的代码,

void Add (int d)
{
struct node* q;
q=malloc(sizeof(struct node));
if (q==NULL)
printf("Not enaugh memory!");
else
{
q->data=d;
if(List==NULL)
{
q->next=NULL;
List=q;
}
else
{
struct node *ptr=List;
while((ptr->next!=NULL)&&(ptr->next->data>d))
{
ptr=ptr->next;
}
q->next=ptr->next;
ptr->next=q;

}
}
}

由于 list 是一个全局变量,因此您不需要将其传递给 Add() 函数。将函数调用更改为

 Add(a);

关于c - 对列表中的数字进行排序/C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23033236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com