c - 使用链表 IN 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->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;
}

帮帮我!当我在//ptr = Input_Node(ptr, 3, 7); 之前删除“//”时程序不运行。

最佳答案

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

pnode ptr;
ptr = (pnode) malloc(sizeof(pnode));

类型 pnode 是一个指针 类型,因此您为指针分配了足够的空间。您需要为 struct PolyNode 提供足够的空间,它必然比 pnode 大,因为它包含多个成员之一。我建议以这种形式编写分配:

ptr = malloc(sizeof(*ptr));

关键是要分配的空间量是根据所需结果的引用大小定义的,而不是根据显式类型定义的。这可以防止您指定错误的类型,并且如果您更改指针指向的类型,则不需要更改它。

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

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

关于c - 使用链表 IN C 表示和排序多项式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39705000/

相关文章:

C:调用2个具有相同名称但不同包的函数

c - Linux下C中如何确定USB存储(U盘) 'device path'

c - 是否可以将私有(private)数据添加到 GtkWidget?

复制链表中的结构

c - 二维动态数组重新分配

c++ - 'initialization'到底是什么意思?

arrays - 将给定大小的字符数组复制到 C 中的整数的正确方法是什么?

c - 七大盗&钻石之谜C程序

c - C中的按位运算符下面的概念是什么?它优化了我的代码并大大减少了运行时间

c - Pro*C 将动态数组传递给 PL/SQL 过程