apple_54543103 2023-10-30 22:55 采纳率: 75%
浏览 2
已结题

请问链表如何向下遍历,

now.next 还是now 无法向下遍历, 请问是因为什么。

#include <stdio.h>
#include <Windows.h>
#define 输出(a, ...) printf(a "\n",##__VA_ARGS__);

/*
 * 3、(14分)某个单位员工工资如下定义struct Salary
{
char id[10];//员工编号char name[20];//员工姓名float wage;//员工工资struct Salary *next;}
(1输入该单位所有员工的工资信息;
(2)请计算输出该单位员工工资的中位数:(将员工工资进行升序排列,中位数是中间位置的员工工资,若n为偶数,
 其中间两位的平均数为中位数)。

 * */
struct Salary{
char id[10];//员工编号
 char name[20];//员工姓名
  float wage;//员工工资
   struct Salary *next;
 };
void input(struct Salary* all,int length)
{     scanf("%10s %20s %f",all->id,all->name,&all->wage);
    输出("%s %s %f",all->id,all->name,all->wage);
    length--;
    for (; 0<length ; length--) {
        all->next= (struct Salary*)malloc(sizeof(struct Salary));
        all=all->next;
        scanf("%10s %20s %f",all->id,all->name,&all->wage);
        输出("%s %s %f",all->id,all->name,all->wage);
    }
    all->next=NULL;
}
/*
 * sd fsd 45
as gr 12.5
as te 48.5
se te 8835.5
 * */
void SalarySort(struct Salary* all,int length)
{
    struct Salary temp;
    struct Salary* now;
    while (all->next!=NULL)
    {
        now=all;
        now=now->next;
        while (now->next!=NULL) {
            if (now->wage < all->wage)
            {
                temp=*now;
                *now =*all;
                *all=temp;
            }    输出("%f,%f",now->wage,all->wage);
            输出("%s,%s",now->id,all->id);
            now=now->next;//this step do not run;now.next=now maybe bug
        }
        输出("now end");
        all=all->next;
    }
}
void output(struct Salary* all)
{
    while (all->next!=NULL) {
        输出("%s %s %f",all->id,all->name,all->wage);
        all=all->next;
    }   输出("%s %s %f",all->id,all->name,all->wage);
}
void SlaryTest()
{
struct Salary *head= (struct Salary*)malloc(sizeof(struct Salary));
    input(head,4);
    SalarySort(head,4);
    output(head);
}

int main()
{

    SlaryTest();
}

  • 写回答

2条回答 默认 最新

  • 零之18 2023-10-30 23:55
    关注
    
    在你的SalarySort函数中,你试图对员工工资进行升序排序,但有一些问题:
    
    在你的排序循环中,你需要使用一个指向当前节点的指针来遍历整个链表,但你没有正确更新now指针,因此它保持不变。这会导致排序不起作用。
    
    当你尝试更新now指针时,你使用了now=now->next;,这是正确的方式来将指针移动到下一个节点。但在下一个循环迭代开始时,你又将now指针重新赋值为all,这会导致你无法正确遍历链表。
    
    为了正确排序链表,你需要修复SalarySort函数的排序逻辑,确保正确地使用now指针来遍历链表。
    
    另外,你的代码在SlaryTest函数中分配了链表头部的内存,但没有释放它。在C中,动态分配的内存应该在使用完后通过free函数来释放,以避免内存泄漏。
    
    最后,你的代码中存在一些拼写错误,如SlaryTest应该是SalaryTest,这可能是打字错误。
    

    以上回答基于chatgpt和自己的想法

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月25日
  • 已采纳回答 11月17日
  • 创建了问题 10月30日

悬赏问题

  • ¥30 Unity接入微信SDK 无法开启摄像头
  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源