1
我正在編寫一個程序來乘以兩個多項式。我需要一些建議,告訴我如何在polyProduct函數的嵌套while循環中重新啓動雙鏈表。我的意思是,在這一點上,我需要回到列表的第一位。這是我的代碼至今:如何重新啓動雙鏈表?
要去名單開始#include "DLListInterface.h"
#include <stdio.h>
#include <stdlib.h>
int numRead(DLnode*,int);
void printList(DLnode*);
DLnode *polyProduct(DLnode*,DLnode*);
int main()
{
DLnode *number1;
DLnode *number2;
DLnode *result;
int readval;
int numbterms;
int i;
scanf("%d",&numbterms);
scanf("%d",&readval);
/* initial DLnode of number1*/
number1=(DLnode*)malloc(sizeof(DLnode));
number1->value=readval;
number1->next=NULL;
number1->prev=NULL;
readval=numRead(number1,numbterms);
scanf("%d",&numbterms);
scanf("%d",&readval);
number2=(DLnode*)malloc(sizeof(DLnode));
number2->value=readval;
number2->next=NULL;
number2->prev=NULL;
readval=numRead(number2,numbterms);
printf("\n");
printList(number1);
printList(number2);
result=polyProduct(number1,number2);
printList(result);
getch();
return 0;
}
int numRead(DLnode*number,int numbterms)
{
int readval,i;
DLnode *anothernode;
for(i=0;i<(numbterms*2)-1;i++)
{
scanf("%d",&readval);
anothernode=(DLnode*)malloc(sizeof(DLnode));
anothernode->value=readval;
anothernode->next=NULL;
anothernode->prev=Dlast(number);
Dlast(number)->next=anothernode;
}
return readval;
}
DLnode *polyProduct(DLnode*poly1,DLnode*poly2)
{
DLnode *result;
DLnode *newnode;
DLnode *first;
first=poly2;
newnode=(DLnode*)malloc(sizeof(DLnode));
newnode->value=(poly1->value)*(poly2->value);
newnode->next=NULL;
newnode->prev=NULL;
result=newnode;
poly1=poly1->next;
poly2=poly2->next;
newnode=(DLnode*)malloc(sizeof(DLnode));
newnode->value=poly1->value+poly2->value;
newnode->next=NULL;
newnode->prev=Dlast(result);
Dlast(result)->next=newnode;
poly1=poly1->prev;
poly2=poly2->next;
while(poly1!=NULL)
{
while(poly2!=NULL)
{
newnode=(DLnode*)malloc(sizeof(DLnode));
newnode->value=(poly1->value)*(poly2->value);
newnode->next=NULL;
newnode->prev=Dlast(result);
Dlast(result)->next=newnode;
poly1=poly1->next;
poly2=poly2->next;
newnode=(DLnode*)malloc(sizeof(DLnode));
newnode->value=poly1->value+poly2->value;
newnode->next=NULL;
newnode->prev=Dlast(result);
Dlast(result)->next=newnode;
poly1=poly1->prev;
poly2=poly2->next;
}
poly1=poly1->next;
poly2=first; //restart poly 2
}
return result;
}
void printList(DLnode*number)
{
while (number!=NULL)
{
printf("%d ",number->value);
number=number->next;
}
printf("\n");
return;
}
//Declaration of DLnode in DLList.h file
typedef struct Dcontainer
{
int value;
struct Dcontainer *next;
struct Dcontainer *prev;
} DLnode;
如果有'Dlast'功能,是有可能有一個'Dfirst'功能? – dreamlax
您似乎沒有將指數與係數一起存儲,所以我不太確定您是如何表示多項式的。你想要「重新啓動」哪個多項式(鏈表)?你似乎有'第一個',所以你可以回到每次迭代的第二個多項式的開始。你需要編輯輸出列表嗎?您需要簡單地標記輸出多項式的開始,以便您可以返回它,並且可以重新啓動它。但是你需要考慮如何手動獲得結果。 (ax2 + bx + c)(dx2 + ex + f)= adx4 +(ae + bd)x3 +(fa + be + cd)x2 +(ce + bf)x + cf? –
@JonathanLeffler number1和number2列表中包含一個接一個的係數和指數。我的想法是乘以係數,並將number2列表中的每一項的指數與number1列表的第一項相加,然後繼續下一項number1列表。但是,當number2列表到達他的末尾時,我遇到了一個問題。我想我最好嘗試分離產品和添加操作。 –