リンクリストと循環表現、つまり最初のノード(ヘッダー)を指す最後のノードのリンクを使用して多項式を実装しようとしています。関数を使用して最初の多項式を作成するとcreate
、最後の循環リンクを含め、すべてのリンクが完全に確立されます。ただし、同じ関数 'create' を使用して 2 番目の多項式を作成すると、最初の多項式の循環リンクが切断されます。(最初の多項式の他のすべてのリンクはそのまま残ります)。TurboC++ コンパイラを使用しています (.c
拡張子を付けてファイルを保存しました)。
作成関数は次のとおりです。
void create(poly header)
{
poly temp;
int i,n;
temp=header;
printf("\nEnter the number of terms: "); scanf("%d",&n);
if(n==0)
{
header->link=header;
return;
}
printf("\nEnter the coefficients and exponents:\n");
for(i=0;i<n;i++)
{
temp->link=malloc(sizeof(poly));
temp=temp->link;
printf("\nCoef: "); scanf("%d",&temp->coef);
printf("Exp : "); scanf("%d",&temp->exp);
if(i==n-1)
temp->link=header;
}
}
主な機能は次のとおりです。
void main()
{
clrscr();
header1=malloc(sizeof(poly));
header2=malloc(sizeof(poly));
printf("Polynomial 1:\n");
create(header1);
printf("\nPolynomial 2:\n");
create(header2);
printf("\n\nP1: ");
display(header1);
printf("\n\nP2: ");
display(header2);
getch();
}
表示機能は次のとおりです。
void display(poly header)
{
poly temp;
if(header->link==header)
printf("Zero polynomial\n");
temp=header->link;
while(temp!=header)
{
if(temp->exp==header->link->exp||temp->coef<0)
printf("%d(x^%d)",temp->coef,temp->exp);
else
printf(" + %d(x^%d)",temp->coef,temp->exp);
temp=temp->link;
}
}
機能create
とdisplay
動作の両方が完璧です。単一の多項式を作成して印刷して確認しました。
プログラムをトレースし、リンクを確認しました (多項式 3x^2+2x+1 と 2x^2+1 をそれぞれ 1 番目と 2 番目の多項式として使用しました)。
これは私が宣言を行った方法です:
struct POLY
{
int coef,exp;
struct POLY *link;
};
typedef struct POLY* poly;
poly header1=NULL,header2=NULL,header3=NULL; //global
私の問題は些細なことに聞こえるかもしれませんが、助けてください。私はリンクされたリストを使用する初心者です。