일원 희소 다항식 (가감 법)

이것 은 우리 의 데이터 구조의 실험 이다. 링크 로 1 원 희소 다항식 의 가감 법 을 실현 하고 내 가 쓴 것 은 정렬 되 지 않 은 것 이다.
기본 적 인 사 고 는 하나의 구조 체 노드 를 만 들 고 모든 항목 의 계수 (float), 지수 (int) 와 next 지침 을 저장 하 는 것 이다.링크 A 와 B 두 개 를 입력 한 후:
1. 지수 가 같 을 때 계수 가 더 해진 다 (감법 시 상감).더 한 계수 가 0 이 아니라면 링크 C 에 저장 합 니 다.
2. 지수 가 같 지 않 으 면 A 의 지수 가 B 보다 작 으 면 A 의 노드 안의 계수, 지 수 를 모두 링크 C 에 저장한다.
3. 반대로 B 의 노드 안의 계수, 지 수 를 모두 링크 C 에 저장한다.
4. 하나의 링크 가 있 는 뒤의 몇 가지 가 더 나 올 때 링크 C 에 저장 합 니 다.
그리고 링크 C 를 출력 합 니 다.
주의사항:
1. 두 결점 은 바 꿀 수 없고 조작 할 때 하나의 노드 가 두 노드 나 첫 번 째 노드 를 가리 키 는 것 을 신청 하여 조작 해 야 한다.
2. 순환 에서 모든 데 이 터 를 입력 하기 전에 노드 공간 을 신청 해 야 합 니 다.
3. 포인터 가 가리 키 는 곳 에 주의 하고 포인터 와 할당 순 서 를 주의 하 세 요.
4. 링크 입력 의 끝 에 주의 하고 입력 이 끝 난 판단 이 있어 야 하 며 꼬리 포인터 가 비어 있어 야 합 니 다.
5. 포인터 함 수 는 마지막 으로 포인터 노드 를 되 돌려 야 합 니 다. 함수 의 유형 도 구조 체 의 유형 입 니 다.
 
코드 는 다음 과 같 습 니 다. 상세 한 설명 이 있 습 니 다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct PolyNode  //    
{
    float coef;  //  
    int exp;     //  
    struct PolyNode * next;
}PolyNode;
typedef PolyNode * Polynomial;   //     
Polynomial  CreateList()    //     
{
    Polynomial L,p,r;
    r = L = (Polynomial )malloc(sizeof(PolyNode ));   //    L    
    L->next = NULL;
    float x;
    int y;
    scanf("%f %d",&x,&y);
    while(x && y)   //          ( x!=0 && y!=0 )
    {
        p = (Polynomial )malloc(sizeof(PolyNode ));
        p->coef = x;
        p->exp = y;
        p->next = NULL;
        r->next = p;
        r = p;
        scanf("%f %d",&x,&y);
        getchar();  //   0 0      
    }
    return L;  //        
}
Polynomial Add(Polynomial A, Polynomial B)  //  
{
    Polynomial C,S;
    Polynomial pa,pb,pc;
    float x;
    pa = A->next;
    pb = B->next;
    C = (Polynomial )malloc(sizeof(PolyNode ));  //      
    pc = C;   //      pc  
    pc->next = NULL;
    while (pa && pb)
    {
        if(pa->exp == pb->exp)  //      
        {
            x = pa->coef + pb->coef;
            if (x)     //         0 
            {
                S = (Polynomial )malloc(sizeof(PolyNode ));
                S->coef = x;
                S->exp = pa->exp;
                S->next = NULL;
                pc->next = S;
                pc = S;
            }
            pa = pa->next;
            pb = pb->next;
        }
        else
            if(pa->exp < pb->exp)   //      A     B    
            {
                S = (Polynomial )malloc(sizeof(PolyNode ));
                S->coef = pa->coef;
                S->exp = pa->exp;
                S->next = NULL;
                pc->next = S;
                pc = S;
                pa = pa->next;
            }
            else   //      A     B    
            {
                S = (Polynomial )malloc(sizeof(PolyNode ));
                S->coef = pb->coef;
                S->exp = pb->exp;
                S->next = NULL;
                pc->next = S;
                pc = S;
                pb = pb->next;
            }
    }
    while (pa)   //A         
    {
        S = (Polynomial )malloc(sizeof(PolyNode ));
        S->coef = pa->coef;
        S->exp = pa->exp;
        S->next = NULL;
        pc->next = S;
        pc = S;
        pa = pa->next;
    }
    while (pb)   //B         
    {
        S = (Polynomial )malloc(sizeof(PolyNode ));
        S->coef = pb->coef;
        S->exp = pb->exp;
        S->next = NULL;
        pc->next = S;
        pc = S;
        pb = pb->next;
    }
    return C;
}
Polynomial Minus(Polynomial A, Polynomial B)  //  ,        
{
    Polynomial C,S;
    Polynomial pa,pb,pc;
    float x;
    pa = A->next;
    pb = B->next;
    C = (Polynomial )malloc(sizeof(PolyNode ));
    pc = C;
    pc->next = NULL;
    while (pa && pb)
    {
        if(pa->exp == pb->exp)
        {
            x = pa->coef - pb->coef; //    
            if (x)
            {
                S = (Polynomial )malloc(sizeof(PolyNode ));
                S->coef = x;
                S->exp = pa->exp;
                S->next = NULL;
                pc->next = S;
                pc = S;
            }
            pa = pa->next;
            pb = pb->next;
        }
        else
            if(pa->exp < pb->exp)
            {
                S = (Polynomial )malloc(sizeof(PolyNode ));
                S->coef = pa->coef;
                S->exp = pa->exp;
                S->next = NULL;
                pc->next = S;
                pc = S;
                pa = pa->next;
            }
            else
            {
                S = (Polynomial )malloc(sizeof(PolyNode ));
                S->coef = pb->coef;
                S->exp = pb->exp;
                S->next = NULL;
                pc->next = S;
                pc = S;
                pb = pb->next;
            }
    }
    while (pa)
    {
        S = (Polynomial )malloc(sizeof(PolyNode ));
        S->coef = pa->coef;
        S->exp = pa->exp;
        S->next = NULL;
        pc->next = S;
        pc = S;
        pa = pa->next;
    }
    while (pb)
    {
        S = (Polynomial )malloc(sizeof(PolyNode ));
        S->coef = pb->coef;
        S->exp = pb->exp;
        S->next = NULL;
        pc->next = S;
        pc = S;
        pb = pb->next;
    }
    return C;
}
int main()
{
    Polynomial A, B, C, pc;
    char f;
    printf("     A:
"); A = CreateList(); printf(" :
"); scanf("%c",&f); getchar(); // printf(" B:
"); B = CreateList(); C = (Polynomial )malloc(sizeof(PolyNode )); C->next = NULL; if(f == '+') C = Add(A , B); if(f == '-') C = Minus(A , B); pc = C->next; while(pc != NULL) { printf(" C :%.2fX^%d " ,pc->coef, pc->exp); pc = pc->next; } printf("
"); return 0; }

좋은 웹페이지 즐겨찾기