順序表-多項式求和


 

 

可以用數組存儲多項式。數組的下標是每項的指數,數組的值是每項的系數:

那么 P 和 Q 就是有序表,P + Q 就是有序數組的合並操作,只要對應項求和即可。

若 n ≤ m,則將 0 至 n 項系數相加,n+1到m直接復制即可,反之亦然。

 

 

 

-----------------------分-----------------------割-----------------------線-----------------------

如果 P 是一個稀疏多項式,又該如何處理呢

 

 

如果仍然采用順序方式存儲,顯然會造成大量的空間浪費,

為提高存儲空間利用率,可采用壓縮存儲方式,也就是只存儲那些有效項。

數組a 只存儲了多項式 p 中的三項,且按照指數從低到高依次存儲。

比如說這道題:

 

 

 就是兩個有序表的合並問題

 

 

 核心代碼:

// 初始設定,i為數組P的下標,j為數組Q的下標,k為數組C的下標
// 數組P和數組Q自然對應上面截圖,數組C則是用於存放二者
int i = j = k = 0;
// 設定 while 循環的結束條件:
// 即 i 不超過存儲多項式P的數組下標。
// 即 j 不超過存儲多項式Q的數組下標。
while(i<N && j<M){
    // 如果數組P下標為 i 的元素的exp項,
    // 也就是指數小於數組Q下標為 j 的元素,就讓其賦值給數組C
    // 這是通過使兩個遞增的數組,重組為一個繼續遞增的數組
    if(P[i].exp < Q[j].exp){
        C[k++] = P[i];
        i++;
    }else if(P[i].exp > Q[j].exp){ // 同上
        C[k++] = Q[j];
        j++;
    }else{ // 如果指數相等(這點並未直接體現,而是上述兩種情況之外的情況,
           // 不是大於小於,那肯定是等於),且常數項相加不為0
           // 就讓兩者常數項相加
           // 再讓把兩者中任意一個(畢竟指數相同)的指數存進數組C的指數項
        if((P[i].ceof + Q[j].ceof) != 0){
            C[k++].ceof = val;
            C[K++].exp = P[i].exp;
        }
        i++;
        j++;
    }
}

最后將 P 或 Q 剩余段加入新表中


免責聲明!

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



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