多項式的表示及相加

問題描述

數據結構(C語言)用單鏈表存儲一元多項式,並實現兩個多項式的相加運算

基本要求

(1)輸入並建立多項式;
(2)輸出多項式,輸出形式爲整數序列:n,c1,e1,c2,e2,……,cn,en,其中n是多項式的項數,ci和ei分別是第i項的係數和指數,序列按指數降序排列;
(3)多項式a和b相加,建立多項式a+b。

思路分析

由於多項式有指數和係數,所以結構體中應該定義三個值:指數,係數,next。然後提示用戶輸入,第一個多項式的項數,每一項的係數和指數,第二個多項式的項數,每一項的係數和指數。申請兩個鏈表存放他們的係數和指數。

這裏以y=1x^2 +2x^3爲例

在這裏插入圖片描述
比較兩個多項式的指數,如果第一個多項式大,第二個多項式指針就向後一位。
相反如果第二個多項式大,第一個就向後指一位。
在這裏插入圖片描述
如果第一個多項式的指數等於第二個多項式,就讓他們的係數相加。
在這裏插入圖片描述
直到有一個多項式到了最後一位,退出循環,不在比較。將指針指向不爲空的那個多項式。最後輸出,即可。

源代碼

#include <stdio.h>
#include <stdlib.h>

typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node {
    ElementType Data;//係數
	ElementType Number;//指數 
    PtrToNode   Next;
};
typedef PtrToNode List;

List Read(); /* 細節在此不表 */
void Print( List L );

int main()
{
    List L,L1,L2,p1,p2,p;
	printf("請輸入第一個多項式\n");
    L1 = Read();
    printf("請輸入第二個多項式\n");
    L2=Read();
    printf("第一個多項式:");
    Print(L1);
    printf("第二個多項式:");
    Print(L2);
    p1=L1->Next;
    p2=L2->Next;
    L=p=L1;// 用L1的頭結點作爲L的頭結點  
    while(p1&&p2){
        if(p1->Number > p2->Number){
            p->Next=p2;
            p=p2;
            p2=p2->Next;
        }else if(p1->Number < p2->Number){
            p->Next=p1;
            p=p1;
            p1=p1->Next;
        }else{
            p1->Data=p1->Data + p2->Data;
            p->Next=p1;
            p=p1;
            p1=p1->Next;
            p2=p2->Next;
        }
    }
    p->Next=p1?p1:p2;
    printf("相加結果:");
    Print(L);
    return 0;
}

List Read(){
    int m,n;
	List L,head;
    head = L = (List)malloc(sizeof(struct Node));
    printf("請輸入多項式的項數\n");
    scanf("%d",&n);
	for(int i=0;i<n;i++){
		L->Next = (List)malloc(sizeof(struct Node));
		printf("請輸入每一項的係數和指數\n");
        scanf("%d%d",&(L->Next->Data),&(L->Next->Number));
        L = L->Next;	
	}
	return head;
}

void Print( List L ){
	List p=L->Next;
	printf("y=");
	while(p){
        printf("%dx^%d", p->Data,p->Number);
        if((p->Next)!=NULL){
            printf("+");
        }
        p=p->Next;
	}
	//printf("%dx^%d", p->Data,p->Number);
	printf("\n");
}

運行截圖

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章