请帮帮我。下面的代码用于表示多项式函数并对多项式进行排序:
#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;
}
帮助我!当我删除&#34; //&#34;在// ptr = Input_Node之前(ptr,3,7);程序没有运行。
答案 0 :(得分:2)
您的问题似乎是您没有为每个节点分配足够的空间。鉴于此代码:
pnode ptr;
ptr = (pnode) malloc(sizeof(pnode));
类型pnode
是指针类型,因此您为指针分配了足够的空间。你需要的是struct PolyNode
足够的空间,它必须大于pnode
,因为它包含几个成员中的一个。我建议以这种形式编写分配:
ptr = malloc(sizeof(*ptr));
关键点是要分配的空间量是根据所需结果的参考大小来定义的,而不是根据显式类型来定义的。这可以保护您不会指定错误的类型,如果更改指针所指向的类型,则不需要更改它。
其次,您不需要在C中转换malloc()
的返回值(尽管您使用的是C ++),但您不应该这样做。
请注意您在所提供的代码中的多个位置都有错误的分配。确保修复所有这些。
答案 1 :(得分:0)
您没有为malloc(sizeof(nodep))
分配足够的内存:sizeof(nodep)
是指针的大小,而不是结构的大小。您应该使用malloc(sizeof(struct PolyNode))
。
考虑通过在Input_Node()
中分配内存来简化代码:
#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;
}