满足条件时,对结构体进行删除(向前补充)

已经知道结构体,现在想写的是


#include<math.h>
struct bian
{
    int d1;
    int d2;
    double j;
    double s;
};
bian dianji[128];
q=50;
for (i = 0; i < q; i++)
    {
        for (k = 0; k < q - i -1; k++)
        {
            if (dianji[k].j > dianji[k + 1].j)
            {
                temp[0] = dianji[k];
                dianji[k] = dianji[k + 1];
                dianji[k + 1] = temp[0];
                if (dianji[k].j == dianji[k + 1].j)//从这一段开始不太懂,当s更大的时候,删除s更小的结构体,后面的数据向前移动
                {
                    while (dianji[k].s < dianji[k + 1].s)
                    {
                        dianji[k]
                    }
                }
            }
        }
    }

你的具体要求是什么呢,把题目要求说清楚。
而且,你这个代码有问题。
双层for循环是冒泡排序的逻辑,从小到大排序,但是,if (dianji[k].j == dianji[k + 1].j)这个if语句,放在了 if (dianji[k].j > dianji[k + 1].j)这个if语句里面,if (dianji[k].j == dianji[k + 1].j)语句永远不会执行的。

img

给你修改了一下,如下:


#include<math.h>
struct bian
{
    int d1;
    int d2;
    double j;
    double s;
};
bian dianji[128];
q = 50;
//冒泡排序,元素按照j从小到大排序
for (i = 0; i < q; i++)
{
    for (k = 0; k < q - i - 1; k++)
    {
        if (dianji[k].j > dianji[k + 1].j)
        {
            temp[0] = dianji[k];
            dianji[k] = dianji[k + 1];
            dianji[k + 1] = temp[0];  
        }
    }
}
//排序完后,如果相邻元素的 j 相同,就删除s更小的结构体元素
for (i = 1; i < q; i++)
{
    if (dianji[i].j == dianji[k - 1].j)//如果i元素的j和i+1元素的j相等,就删除s较小的
    {
        if (dianji[i - 1].s < dianji[i].j) //i-1元素的s比i元素的s小,删除i-1元素,后面的元素前移
        {
            for (j = i - 1; j < q - 1; j++)
                dianji[j] = dianji[j + 1];
            q--;
            i--;
        }
        else //i-1元素的s比i元素的s大(或者相等),删除i元素,后面的元素前移
        {
            for (j = i; j < q - 1; j++)
                dianji[j] = dianji[j + 1];
            q--;
            i--;
        }
    }
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632