用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));
Typepnode
是指针类型,因此为指针分配了足够的空间。您需要的是足够的空间来容纳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;
}