gpt4 book ai didi

c - 如何在结构中对数据进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 02:53:21 24 4
gpt4 key购买 nike

我需要打印出 avgCost 整数并按最低成本排序。

我怎样才能通过任何一种方式实现这一点?

我只需要帮助对 avgCost 整数进行排序,以便以最低的成本将其打印出来。不需要特定的排序例程。我可以通过已经集成的 qsort() 来完成吗?

#include <stdio.h>
#include <cstdlib>

int main(void)
{
struct mcDonalds {
char *name;
char *address;
int avgCost;
char foodType;
};

struct burgerKing {
char *name;
char *address;
int avgCost;
char foodType;
};

struct tacoBell {
char *name;
char *address;
int avgCost;
char foodType;
};

struct mcDonalds a;
struct burgerKing b;
struct tacoBell c;

printf("\n\n");
system("PAUSE");
return 0;
}

最佳答案

编辑:显然您可以使用 qSort,但您应该在执行任何其他操作之前真正阅读此内容。并阅读如何使用结构以及链表

方法一

我还认为您应该将您的结构设置为一个链接列表,该列表将在元素添加到其中时进行排序。没有必要为每个食品供应商提供单独的结构。相反,你可以有这样的东西:

struct fastFoodVendor{
char *chain;
char *name;
char *address;
char *foodType;
int avgCosts;
struct fastFoodVendor *next
}

所以现在,当您添加一个结构时,您会将其合并到链表中,并在添加项目时进行排序。

假设您的列表中已经有 3 个结构,平均价格如下:

5-10-15

因此,第一个平均价格为 5 的结构有一个名为 next 的指针指向平均价格为 10 的结构,而后者又有一个名为 next 的指针指向平均价格为 15 的结构。

现在您想要将平均价格为 13 的链添加到此列表中,您将需要某种添加方法,其工作方式如下:

请记住,您首先必须有一些变量...一个是 fastFoodVendor 结构,它被称为 head 指向列表中的第一个元素(5) (struct fastFoodVendor *head) 您将在添加第一个元素时设置它,然后根据您的列表需要更新它。

因此,我会建议另一个名为 temp 的结构指针,它将遍历列表直到找到正确的位置。为此,我会有一个 while 循环。

while(temp->next != null){
if(temp->next->avgCost > structToAdd->avgCost){
structToAdd->next = temp->next;
temp->next = structToAdd;
}
else{
temp = temp->next;
}
}

这样做的目的是将 13 插入列表中的 15 之前。

让我解释一下这个 while 循环的作用...您必须将条件设置为 temp->next != null 因为如果您尝试从空指针访问信息,您将得到一个段错误。

一旦进入循环,您将检查前面的节点是否具有比您尝试插入的节点更大的 avgCost。所以 temp 指向 5,你检查下一个节点的 avgCost 是否大于 13,但它是 10,所以你通过设置 temp = 10 的节点在列表中向前移动。现在你在 10 你检查下一个节点 (15) 是否大于 13...嗯它是......所以你仍然在 10 并且你想将这个节点设置在你想要添加的结构旁边,但在你这样做之前,你必须将你想要添加的节点 (13) 的下一个指针设置为 temp->next 当前指向的内容,否则你将丢失该节点,因为什么都不会将 10 的下一个指针设置为 13 节点后指向它。

我知道这真的很长而且可能有点复杂,所以这里有一个方法,我个人不会使用但它应该有效

方法二

你有一个固定的结构数组,但这也只有在你使用一种类型的结构(即我上面列出的 fastFoodVendor)并且有一个你可以像你一样排序的固定数组时才有效将是一个普通数组,但我仍然不相信您能够使用 qSort,因此您必须开发自己的方法来对数组中的内容进行排序和更改。我不会选择这种方法的原因是因为有很多开销,并且浪费了很多时间(取决于您处理的数据量,对于您的情况,我假设差异可以忽略不计)。关于 C 的最好的事情之一是它如何具有动态的能力,这就是链表正在做的事情。

看看这个链表教程: http://www.cprogramming.com/tutorial/c/lesson15.html应该有帮助

关于c - 如何在结构中对数据进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19847078/

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