我要飞=_= 2022-04-09 21:16 采纳率: 70.6%
浏览 15
已结题

写的代码有问题,主要就是链式存储实现线性表的内容(C语言)

代码如下


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

struct PolyNode{
    int coef;    //系数 
    int expon;    //指数 
    struct PolyNode *link;    //下一节点指针
};
typedef struct PolyNode *Polynomial;

/*PolyAdd的子程序*/
void Attach(int c,int e,Polynomial *pRear)
{
    Polynomial P;
    P=(Polynomial)malloc(sizeof(struct PolyNode));
    P->coef = c;
    P->expon = e;
    P->link = NULL;
    (*pRear)->link = P;
    *pRear = P;
}
/*PolyAdd的子程序*/
int Compare(int x1,int x2)
{
    if(x1>x2) return 1;
    else if(x1<x2) return -1;
    else return 0;
}
Polynomial PolyAdd( Polynomial P1,Polynomial P2 )
{
    Polynomial front,rear,temp;
    int sum;
    rear = (Polynomial)malloc(sizeof(struct PolyNode));
    front = rear;
    while(P1&&P2){
        switch(Compare(P1->expon,P2->expon)){
            case 1:
                Attach(P1->coef,P1->expon,&rear);
                P1=P1->link;
                break;
            case -1:
                Attach(P2->coef,P2->expon,&rear);
                P2=P2->link;
                break;
            case 0:
                sum=P1->coef+P2->coef;
                if(sum)Attach(sum,P1->expon,&rear);
                P1=P1->link;
                P2=P2->link;
                break;
        }
    }
    for(;P1;P1=P1->link) Attach(P1->coef,P1->expon,&rear);
    for(;P2;P2=P2->link) Attach(P2->coef,P2->expon,&rear);
    rear->link=NULL;
    temp=front;
    front=front->link;
    free(temp);
    return front;
}

Polynomial CreateNode()
{
    Polynomial P;
    int c,e;
    scanf("%d%d",&c,&e);
    P = (Polynomial)malloc(sizeof(struct PolyNode));
    P->coef=c;
    P->expon=e;
    P->link=NULL;
    return P;
}

Polynomial Create()
{
    int N,i,c,e;
    scanf("%d",&N);
    Polynomial Pfront,rear,temp;
    rear = (Polynomial)malloc(sizeof(struct PolyNode));
    rear->link=NULL;
    Pfront = rear;
    for(i=1;i<=N;i++){
        printf("i=%d\n,N=%d\n",i,N);
        rear->link=CreateNode();
        rear=rear->link;
    }
    temp = Pfront;
    Pfront=Pfront->link;
    free(Pfront);
    if(rear->link==NULL) printf("Success Create!\n");
    rear = Pfront;
    while(rear){
        printf("%d %d ",rear->coef,rear->expon);
        rear=rear->link;
    }
    return Pfront;
}

void printPoly(Polynomial P)
{
    while(P!=NULL){
        if(P->link!=NULL) printf("%d %d ",P->coef,P->expon);
        else if(P->link==NULL) printf("%d %d",P->coef,P->expon);
        P=P->link;
    }
}

int main()
{
    printf("00000\n");
    Polynomial P1=Create();
    printf("11111\n");
    Polynomial P2=Create();
    printPoly(P2);
    printf("22222\n");
    Polynomial P3=PolyAdd(P1,P2);
    printf("33333\n");
    Polynomial rear=P3;
    int cnt=3;
    while(rear){
        
        printf("%d %d ",rear->coef,rear->expon);
        rear=rear->link;
        return;
    }
    return 0;
}

我的问题就在Create()里面,因为发现创造后的链表没法输出了。我的输出方法在Create()里面也有用,就是那句while的循环语句。麻烦看看哪里出错了

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2022-04-09 21:24
    关注

    90行free(Pfront);为什麽呢?????在create函数里释放?
    temp = Pfront;
    Pfront=Pfront->link;
    free(Pfront);
    这不直接让temp指向了一个野指针了?

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

报告相同问题?

问题事件

  • 系统已结题 4月17日
  • 已采纳回答 4月9日
  • 创建了问题 4月9日

悬赏问题

  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上