用C语言中的链表表示和排序多项式

用C语言中的链表表示和排序多项式,c,C,请帮帮我。下面的代码表示多项式函数,并对该多项式进行排序: #include <stdio.h> #include <stdlib.h> typedef struct PolyNode *pnode; typedef struct PolyNode { float coef; int expon; pnode next; }; pnode Make_Node(pnode ptr, float coef, int expon) { ptr

请帮帮我。下面的代码表示多项式函数,并对该多项式进行排序:

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

typedef struct PolyNode *pnode;
typedef struct PolyNode {
    float coef;
    int expon;
    pnode next;
};

pnode Make_Node(pnode ptr, float coef, int expon) {
    ptr->coef = coef;
    ptr->expon = expon;
    ptr->next = NULL;
    return ptr;
}

pnode Input_Node(pnode ptr, float coef, int expon) {
    if (ptr->expon < expon || ptr) {
        pnode temp = NULL;
        temp = malloc(sizeof(pnode));
        temp = Make_Node(temp, coef, expon);
        temp->next = ptr;
        ptr = temp;
        return ptr;
    } else {
        pnode temp = NULL;
        temp = malloc(sizeof(pnode));
        temp = Make_Node(temp, coef, expon);
        pnode pol;
        pol = ptr;
        while (pol->next && pol->next->expon > expon) {
            pol = pol->next;
        }
        temp->next = pol->next;
        pol->next = temp;
        return ptr;
    }
}

void Print_Pol(pnode ptr) {
    pnode temp;
    temp = ptr;
    while (temp) {
        printf("%gx^%d", temp->coef, temp->expon);
        if (temp->next != NULL) {
            printf(" + ");
        }
        temp = temp->next;
    }
}

int main() {
    pnode ptr;
    ptr = (pnode)malloc(sizeof(pnode));
    ptr = Make_Node(ptr, 2, 3);
    ptr->next = NULL;
    ptr = Input_Node(ptr, 2, 4);
    printf("%s%d\n", &ptr, ptr->expon);
    ptr = Input_Node(ptr, 3, 6);
    printf("%s%d\n", &ptr, ptr->expon);
    // ptr = Input_Node(ptr, 3, 7);

    Print_Pol(ptr);
    return 0;
}
#包括
#包括
typedef结构PolyNode*pnode;
typedef结构多项式{
浮动系数;
国际展览馆;
pnodenext;
};
pnode Make_节点(pnode ptr、float coef、int expon){
ptr->coef=coef;
ptr->expon=expon;
ptr->next=NULL;
返回ptr;
}
pnode输入节点(pnode ptr、float coef、int expon){
if(ptr->expon下一步=ptr;
ptr=温度;
返回ptr;
}否则{
pnodetemp=NULL;
temp=malloc(sizeof(pnode));
temp=生成节点(temp、coef、expon);
pnodepol;
pol=ptr;
而(pol->next&&pol->next->expon>expon){
pol=pol->next;
}
温度->下一步=油料->下一步;
pol->next=温度;
返回ptr;
}
}
作废打印单(pnode ptr){
pnode温度;
温度=ptr;
while(临时){
printf(“%gx^%d”,temp->coef,temp->expon);
如果(临时->下一步!=NULL){
printf(“+”);
}
温度=温度->下一步;
}
}
int main(){
pnodeptr;
ptr=(pnode)malloc(sizeof(pnode));
ptr=制造节点(ptr,2,3);
ptr->next=NULL;
ptr=输入节点(ptr,2,4);
printf(“%s%d\n”,&ptr,ptr->expon);
ptr=输入节点(ptr,3,6);
printf(“%s%d\n”,&ptr,ptr->expon);
//ptr=输入节点(ptr,3,7);
打印油(ptr);
返回0;
}


救救我!当我擦除//ptr=Input_节点(ptr,3,7)之前的“/”时;程序未运行。

您的问题似乎是没有为每个节点分配足够的空间。鉴于此代码:

pnode ptr;
ptr = (pnode) malloc(sizeof(pnode));
Type
pnode
是指针类型,因此为指针分配了足够的空间。您需要的是足够的空间来容纳
struct PolyNode
,它必然比
pnode
大,因为它包含多个成员中的一个。我建议用以下表格填写分配:

ptr = malloc(sizeof(*ptr));
关键的一点是,要分配的空间量是根据所需结果的引用的大小定义的,而不是根据显式类型定义的。这可以防止您指定错误的类型,并且如果您更改指针指向的类型,则无需更改该类型

第二,您不需要在C中强制转换
malloc()
的返回值(尽管您在C++中这样做),也不应该这样做


请注意,在您呈现的代码中,有几个地方存在错误的分配。确保修复所有问题。

您没有为malloc(sizeof(nodep))分配足够的内存。:
sizeof(nodep)
是指针的大小,而不是结构的大小。您应该改为使用
malloc(sizeof(struct PolyNode))

考虑通过在
Input\u Node()中分配内存来简化代码:

#包括
#包括
typedef结构PolyNode*pnode;
结构多项式{
浮动系数;
国际展览馆;
pnodenext;
};
pnode输入节点(pnode ptr、float coef、int expon){
pnode temp=malloc(sizeof(*ptr));
if(temp==NULL)
返回NULL;
温度->系数=系数;
温度->指数=指数;
temp->next=NULL;
如果(ptr==NULL | | ptr->expon下一步=ptr;
ptr=温度;
}否则{
pnode pol=ptr;
而(pol->next&&pol->next->expon>expon){
pol=pol->next;
}
温度->下一步=油料->下一步;
pol->next=温度;
}
返回ptr;
}
作废打印单(pnode ptr){
pnode temp=ptr;
while(临时){
printf(“%gx^%d”,temp->coef,temp->expon);
如果(临时->下一步!=NULL){
printf(“+”);
}
温度=温度->下一步;
}
printf(“\n”);
}
内部主(空){
pnode ptr=输入节点(NULL,2,3);
ptr=输入节点(ptr,2,4);
ptr=输入节点(ptr,3,6);
ptr=输入节点(ptr,3,7);
打印油(ptr);
返回0;
}

不要将指针性质隐藏在typedef后面!它让包括你在内的每个人都感到困惑。即使这个评论不存在,它也不会运行。我建议将错误输出作为文本放在问题中;随着时间的推移,无法保证你的图像链接会继续工作。
#include <stdio.h>
#include <stdlib.h>

typedef struct PolyNode *pnode;
struct PolyNode {
    float coef;
    int expon;
    pnode next;
};

pnode Input_Node(pnode ptr, float coef, int expon) {
    pnode temp = malloc(sizeof(*ptr));
    if (temp == NULL)
        return NULL;
    temp->coef = coef;
    temp->expon = expon;
    temp->next = NULL;

    if (ptr == NULL || ptr->expon < expon) {
        temp->next = ptr;
        ptr = temp;
    } else {
        pnode pol = ptr;
        while (pol->next && pol->next->expon > expon) {
            pol = pol->next;
        }
        temp->next = pol->next;
        pol->next = temp;
    }
    return ptr;
}

void Print_Pol(pnode ptr) {
    pnode temp = ptr;
    while (temp) {
        printf("%gx^%d", temp->coef, temp->expon);
        if (temp->next != NULL) {
            printf(" + ");
        }
        temp = temp->next;
    }
    printf("\n");
}

int main(void) {
    pnode ptr = Input_Node(NULL, 2, 3);
    ptr = Input_Node(ptr, 2, 4);
    ptr = Input_Node(ptr, 3, 6);
    ptr = Input_Node(ptr, 3, 7);
    Print_Pol(ptr);
    return 0;
}