0

リンクリストと循環表現、つまり最初のノード(ヘッダー)を指す最後のノードのリンクを使用して多項式を実装しようとしています。関数を使用して最初の多項式を作成すると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;
    }
}

機能createdisplay動作の両方が完璧です。単一の多項式を作成して印刷して確認しました。

プログラムをトレースし、リンクを確認しました (多項式 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

私の問題は些細なことに聞こえるかもしれませんが、助けてください。私はリンクされたリストを使用する初心者です。

4

1 に答える 1

0

polyがポインタ型の場合、smalloc()が間違った量のメモリを割り当てている可能性があります。– ジョン・ボリンジャー

malloc() で「poly」を「struct POLY」に置き換えただけで、目的の出力が得られました。– アルジュ​​ン・デサイ

于 2015-06-09T09:15:56.667 に答える