m0_74128289 2023-01-26 19:28 采纳率: 87.5%
浏览 60
已结题

怎么修改这个链表的插入 使输出可以从小到大输出

怎么修改这个链表的插入 使输出可以从小到大输出
错误的

img

#include<stdio.h>
#include<stdlib.h>
typedef struct PNODE
{
    float coef;
    int expn;
    struct PNODE*next;
}PNODE;
PNODE *insert(PNODE *head,PNODE *s);
PNODE *creatPoly(PNODE *head);
void shuchu(PNODE *head);
PNODE *addPoly(PNODE *headA,PNODE *headB);
int main()
{
    PNODE *headA,*headB;
    headA=creatPoly(headA);
    shuchu(headA);
    headB=creatPoly(headB);
    shuchu(headB);
}
PNODE *creatPoly(PNODE *head)
{
    int n,i;
    head=NULL;
    PNODE *s;
    printf("输入该多项式的项数:");
    scanf("%d",&n);
    printf("\n输入多项式各项系数以及指数:");
    for(i=1;i<=n;i++)
    {
        s=(PNODE*)malloc(sizeof(PNODE));
        scanf("%f %d",&s->coef,&s->expn);
        if(i!=1)
        {
            head=insert(head,s);
        }
        else
        {
            head=s;
            head->next=NULL;
        }
    }
    printf("输入完成\n");
    return head;
}
PNODE *insert(PNODE *head,PNODE *s)
{
    PNODE *p,*pr;
    p=pr=head;
    while(p->expn<s->expn&&p->next!=NULL)
    {
        pr=p;
        p=p->next;
    }
    if(p->expn>=s->expn&&p->next!=NULL)
    {
        if(p==head)
        {
            head=s;
            s->next=p;
        }
        else
        {
            pr->next=s;
            s->next=p;
        }
    }
    else
    {
        p->next=s;
        s->next=NULL;
    }
    return head;
}
void shuchu(PNODE *head)
{
    PNODE *p;
    p=head;
    printf("\n输出多项式:\n");
    while(p!=NULL)
    {
        printf("\t%f %d,",p->coef,p->expn);
        p=p->next;
    }
}


  • 写回答

2条回答 默认 最新

  • qzjhjxj 2023-01-27 15:08
    关注

    修改如下,改动处见注释,供参考:

    #include<stdio.h>
    #include<stdlib.h>
    typedef struct PNODE
    {
        float coef;
        int expn;
        struct PNODE*next;
    }PNODE;
    PNODE *insert(PNODE *head,PNODE *s);
    PNODE *creatPoly(PNODE *head);
    void  shuchu(PNODE *head);
    PNODE *addPoly(PNODE *headA,PNODE *headB);
    int main()
    {
        PNODE *headA,*headB;
        headA=creatPoly(headA);
        shuchu(headA);
        headB=creatPoly(headB);
        shuchu(headB);
        
        return 0;
    }
    PNODE *creatPoly(PNODE *head)
    {
        int n,i;
        head=NULL;
        PNODE *s;
        printf("输入该多项式的项数:");
        scanf("%d",&n);
        printf("\n输入多项式各项系数以及指数:");
        for(i=1;i<=n;i++)
        {
            s=(PNODE*)malloc(sizeof(PNODE));
            s->next = NULL;                 //修改
            scanf("%f %d",&s->coef,&s->expn);
            if(i!=1)
            {
                head=insert(head,s);
            }
            else
            {
                head=s;
                head->next=NULL;
            }
        }
        printf("输入完成\n");
        return head;
    }
    PNODE *insert(PNODE *head,PNODE *s)
    {
        PNODE *p,*pr;
        p=pr=head;
        while(p->next && p->next->expn < s->expn)
        //(p->expn<s->expn&&p->next!=NULL)  //修改
        {
            //pr=p; //修改
            p=p->next;
        }
        if (p == head && p->expn > s->expn){//修改
            s->next = head;
            head = s;
        }
        else{                               //修改
            s->next = p->next;
            p->next = s;
        }
        //if(p->expn>=s->expn&&p->next!=NULL)//修改 以下删除
        //{
        //    if(p==head)
        //   {
        //        head=s;
        //        s->next=p;
        //    }
        //    else
        //    {
        //        pr->next=s;
        //        s->next=p;
        //    }
        //}
        //else
        //{
        //    p->next=s;
        //    s->next=NULL;
        //}
        return head;
    }
    void shuchu(PNODE *head)
    {
        PNODE *p;
        p=head;
        printf("\n输出多项式:\n");
        while(p!=NULL)
        {
            printf("\t%f %d,",p->coef,p->expn);
            p=p->next;
        }
        printf("\n");    //修改
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月4日
  • 已采纳回答 1月27日
  • 创建了问题 1月26日

悬赏问题

  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类