Liste unique des applications

Description du problème:

L'achèvement de l'opération d'addition de deux polynômes: Il y a deux opération polynomiale P connue (x), Q (X), l'algorithme de conception P (x) + Q (x), mais pas d'ajouter à l'espace de re-ouverte. exigences de la structure de stockage mis en œuvre. Par exemple:
Alt

Conception algorithme

Le programmé quatre fonctions:
➢ fonction Init () pour initialiser le onze liste vide;
➢ fonction CreateTail () est utilisée pour créer une liste liée, ceci est la fin de la méthode d'interpolation pour créer une liste liée;
➢ fonction add () ajouter algorithme utilisé pour mettre en œuvre les deux polynômes;
➢ fonction print () pour produire un polynôme.
La somme de deux polynômes algorithme, les deux premiers polynômes sont stockés sous la forme d' une liste liée. Deux pointeurs peuvent être fournis LA1 et LB1 , respectivement, le premier noeud mobile polynômes Pm (x) et Qm (x) à partir de la comparaison de l' indice LA1 et LB1 noeud indiqué, on peut traiter les trois cas suivants:
(1 ) Si LA1-> exp <LB1-> exp, LA1 est désigné comme un noeud d'un polynôme, pointeur LA1 est déplacé vers l' arrière une position sur la base de l'original _.
(2) Si LA1-> exp = LB1-> exp, en ajoutant le coefficient article correspondant, puis deux cas: si le coefficient
terme est égal à zéro, le noeud est libéré LA1 et LB1 est dirigé, si le coefficient le terme est non nul et, LA1 modifier le
noeud de domaine de coefficient pointé par la libération noeud LB1.
(3) Si LA1-> exp> LB1-> exp, le noeud LB1 appelé un pointeur polynomiales, LB1 initial
se déplace sur la base d' une position vers l' arrière.
Comme le montre la figure expérimentale.:
Alt

réalisation du programme

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct poly
{
    int exp;//指数幂
    int coef;//指数
    struct poly* next;//指针域
}PNode,*Plinklist;
int Init(Plinklist* head)//链表的初始化
{
    *head=(Plinklist)malloc(sizeof(PNode));
    if(*head)
    {
        (*head)->next=NULL;
        return 1;
    }
    else
        return 0;
}
int CreateTail(Plinklist *head)//尾插法创建链表
{
    Plinklist pTemp,pHead;
    int c;//存放系数
    int exp;//存放指数
    int i=1;//计数用户计算到第几项
    pHead=*head;
    scanf("%d,%d",&c,&exp);
    while(c!=0)
    {
        pTemp=(Plinklist)malloc(sizeof(PNode));
        if(pTemp)
        {
            pTemp->exp=exp;
            pTemp->coef=c;
            pTemp->next=NULL;
            pHead->next=pTemp;
            pHead=pTemp;
            scanf("%d,%d",&c,&exp);
        }
        else
            return 0;
    }
    return 1;
}
void add(Plinklist LA,Plinklist LB)//两个多项式相加,两个表都是按指数顺序增长
{
    PNode *LA1=LA->next;//LA的移动
    PNode *LB1=LB->next;//LB的移动
    PNode *temp;//保存要删除的节点
    int sum=0;//存放系数的和
    while(LA1&&LB1)
    {
        if(LA1->exp<LB1->exp)
        {
            LA->next=LA1;
            printf("%d %d\n",LA->coef,LA->exp);
            LA=LA->next;
            LA1=LA1->next;
        }
        else if(LA1->exp==LB1->exp)
        {
            sum=LA1->coef+LB1->coef;
            if(sum)
            {
                LA1->coef=sum;
                LA->next=LA1;
                LA=LA->next;
                LA1=LA1->next;
                temp=LB1;
                LB1=LB1->next;
                free(temp);
            }
            else
            {
                temp=LA1;
                LA1=LA1->next;
                free(temp);
                temp=LB1;
                LB1=LB1->next;
                free(temp);
            }
        }
        else
        {
            LA->next=LB1;
            LA=LA->next;
            LB1=LB1->next;
        }
    }
    if(LA1)//剩余节点插入链表
        LA->next=LA1;
    else
        LA->next=LB1;
}
void print(Plinklist head)//输出多项式
{
    head=head->next;
    while(head)
    {
        if(head->exp)
            printf("%dx^%d",head->coef,head->exp);
        else
            printf("%d",head->coef);
        if(head->next)
            printf("+");
        else
            break;
        head=head->next;
    }
}
int main()
{
    Plinklist LA,LB;
    Init(&LA);
    Init(&LB);
    printf("请输入第一个多项式的系数,指数(如2,3)输入0,0结束输入\n");
    CreateTail(&LA);
    printf("请输入第二个多项式的系数,指数(如2,3)输入0,0结束输入\n");
    CreateTail(&LB);
    print(LA);
    printf("\n");
    print(LB);
    printf("\n");
    add(LA,LB);
    printf("两个多项式相加的结果为:\n");
    print(LA);
    printf("\n");
    return 0;
}

Le résultat:
Alt
le code terminé, le dessin sur un livre rempli. Mais dans les deux fonction polynomiale de la somme des derniers à avoir une peine de juge:
Alt
cela ne comprend toujours pas pourquoi devrions - nous augmenter ces mots, comme s'il n'y a pas d' effet enlevé. Il n'y a pas grand frère pour dire look blanc, je considère moins le genre de situation?

Publié 40 articles originaux · louange gagné 174 · vues 20000 +

Je suppose que tu aimes

Origine blog.csdn.net/weixin_44895651/article/details/105124438
conseillé
Classement