데이터 구조 - 다항식 더하기

이 코드 는 여러 가지 추가 주요 함 수 를 실현 합 니 다. 1. 오름차 순 에 따라 결점 을 링크 2. 출력 링크 3. 두 링크 를 추가 하 는 과정 입 니 다.
입력 형식 은 프로그램 알림 을 보십시오.
#include 
#include 
#include 
#define FALSE 0
#define TRUE 1
typedef int DataType;

typedef struct tagNode
{
    float coef;
    int exp;
    struct tagNode *pNext;
};

typedef struct tagNode Node;
typedef struct tagNode *pNode;

//              ,             
void insertList(pNode head, pNode pnode) //     ,      
{
    pNode pPre = head;
    while(pPre->pNext != NULL)
    {
        if (pPre->pNext->exp > pnode->exp)
        {
            pnode->pNext = pPre->pNext;
            pPre->pNext = pnode;
            break;
        }
        else if(pPre->pNext->exp == pnode->exp)                 //       ,                         
        {                                                       //       
            pPre->pNext->coef = pPre->pNext->coef+pnode->coef;
            free(pnode);
            break;
        }
        pPre = pPre->pNext;
    }
    if (pPre->pNext == NULL) //           ,         
    {
        pPre->pNext = pnode;
    }
}

//     
void printLinkedList(pNode head)
{
    pNode temp = head->pNext;
    while (temp != NULL)
    {
        printf(" %g", temp->coef);
        printf("x^%d +", temp->exp);
        temp = temp->pNext;
    }
    printf("\b 
"
); } // void add_poly(Node *pa, Node *pb) { Node *p = pa->pNext; // 1, 1 Node *q = pb->pNext; // 2 Node *pre = pa; Node *temp; // float x; while(p != NULL && q != NULL) // { if (p->exp < q->exp) // 1 2 { pre = p; p = p->pNext; // 1 , 。 } else if(p->exp == q->exp) // 1 2 { x = p->coef + q->coef; // x 。 x 0 if (x != 0) // x 0 1 { p->coef = x; pre = p; } else // x 0 1 { pre->pNext = p->pNext; free(p); } p = pre->pNext; // p // 2 。 temp = q; q = q->pNext; free(temp); } else // 1 2 , 1 { temp = q->pNext; q->pNext = p; pre->pNext = q; pre = q; q = temp; } } if (q) // 2 1 , 2 1 。 { pre->pNext = q; } free(pb); } int main() { pNode head1 = (pNode)malloc(sizeof(struct tagNode)); // pNode head2 = (pNode)malloc(sizeof(struct tagNode)); int exp, temp1; // float coef, coef2; // pNode pTemp = NULL; head1->pNext = NULL; head2->pNext = NULL; // 1 printf(" 1 , \' , \'。 , 0 。
"
); // , 0,0 , 。 scanf("%f,%d", &coef, &exp); while(coef != 0 || exp != 0) { pTemp = (pNode)malloc(sizeof(struct tagNode)); pTemp->coef = coef; pTemp->exp = exp; pTemp->pNext = NULL; insertList(head1, pTemp); //temp1 = exp; //temp2 = coef; scanf("%f,%d", &coef, &exp); } printf(" 1 :
"
); printLinkedList(head1); printf("
"
); // 2 printf(" 2 , \' , \'。 , 0 。
"
); // , 0,0 , 。 scanf("%f,%d", &coef, &exp); while(coef != 0 || exp != 0) { pTemp = (pNode)malloc(sizeof(struct tagNode)); pTemp->coef = coef; pTemp->exp = exp; pTemp->pNext = NULL; insertList(head2, pTemp); scanf("%f,%d", &coef, &exp); } printf(" 2 :
"
); printLinkedList(head2); printf("
"
); // add_poly(head1, head2); printf(" :
"
); printLinkedList(head1); printf("
"
); system("pause"); return 0; }

좋은 웹페이지 즐겨찾기