數據結構——鏈表實現一元多項式的表示和加法


一元多項式的鏈式結構:

Typedef  struct  Lnode
{
    float coef;///系數
    int  expn;///指數
    struct  Lnode  *next;
}  PLnode, *PLinkList;


基本思想:

(1)若pa->expn小於pb->expn,則pa繼續向前掃描;
  (2)若pa->expn等於pb->expn,將其系數相加,若相加結果不為0,將結果放入pa->coef中,並刪除pb所指的結點,否則同時刪除pa和pb所指的結點,然后pa和pb繼續向前掃描;

(3)若pa->expn大於pb->expn,則將pb所指的結點插入pa所指的結點之前,然后pb繼續向前掃描;
(4)重復上述過程直到pa或pb有一個為空為止,最后將剩余結點的鏈表接在結果鏈表上。

 

PLinklist Add(PLinklist pa,PLinklist pb)
{
    PLinklist p,q,r,s; /*兩個多項式相加*/
    int cmp,x;
    p=pa->next;  /*指向pa的第一個元素*/
    q=pb->next; /*指向pb的第一個元素*/
    s=pa; /*s作為P的跟蹤指針*/
    r=pb;/*r作為q的跟蹤指針*/
    while(p!=NULL&&q!=NULL)
    {
        if(p->exp<q->exp)
        {
            cmp=-1;
        }
        else if(p->exp>q->exp)
        {
            cmp=1;
        }
        else///指數相等
        {
            cmp=0;
        }
        switch(cmp)
        {
        /*根據指數的比較情況進行不同的處理*/
        case -1:
        {
            s=p;
            p=p->next;///pa表指針后移,沒有插入
            break;
        }
        case 0:
        {
            x=p->coef+q->coef;///指數相等,系數相加
            if(x!=0) /*系數不為0*/
            {
                p->coef=x;
                s=p;
                p=p->next;
            }/*if*/
            else///系數為0,在pa表中刪除該結點
            {
                s->next=p->next;
                free(p);
                p=s->next;
            }/*else*/
            r->next=q->next;///在pb表中刪除該結點
            free(q);
            q=r->next;
            break;
            } /*case0*/
        case 1:
        {
            q->next=s->next;
            s->next=q;///將pb表中的q插入到pa表中的s的后面
            r->next=q->next;
            s=q;
            q=r->next;
            break;
            } /*case1*/
        }/*switch*/
    }/*while*/
    if(q!=NULL)///當pb連表還有剩余時接入到pa連表的尾部
    {
        s->next=q;
    }
    free(pb);
    return pa;
}/* Add*/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM