0

我正在尝试使用链表和循环表示来实现多项式,即最后一个节点的链接指向第一个节点(标题)。当我使用该函数创建我的第一个多项式时,create所有链接都会完美建立,包括最后一个循环链接。然而,当我使用相同的函数“create”创建第二个多项式时,第一个多项式的循环链接会中断。(第一个多项式的所有其他链接保持不变)。我正在使用 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 作为我的第一个和第二个多项式)。

这就是我完成声明的方式:

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是指针类型,那么您malloc()的 s 可能分配了错误的内存量。——约翰·布林格

我刚刚在 malloc() 中用 'struct POLY' 替换了 'poly' 并得到了所需的输出。——阿琼·德赛

于 2015-06-09T09:15:56.667 回答