polynomial processing with node Source
#include <stdio.h> #include <stdlib.h> // 다항식 노드 typedef struct ListNode { int coef; // 계수 int expo; // 차수 struct ListNode * link; }ListNode; ListNode* insert_last(ListNode *p, int coef, int expo) { ListNode *tmp, *new; // 새로운 노드 동적 생성 new = (ListNode*)malloc(sizeof(ListNode)); new->coef = coef; new->expo = expo; new->link = NULL; // 마지막 노드까지 가게 하기 tmp = p; while (tmp->link != NULL) tmp = tmp->link; // 마지막 노드의 link연결 tmp->link = new; return p; } void poly_add(ListNode *p, ListNode *q, ListNode *r) { int sum; while (p&&q) { if (p->expo == q->expo) { sum = p->coef + q->coef; if (sum != 0) insert_last(r, sum, p->expo); p = p->link; q = q->link; } else if (p->expo > q->expo) { insert_last(r, p->coef, p->expo); p = p->link; } else { insert_last(r, q->coef, q->expo); q = q->link; } } for (; p; p = p->link) insert_last(r, p->coef, p->expo); for (; q; q = q->link) insert_last(r, q->coef, q->expo); } void print_list(ListNode* p) { for (; p; p = p->link) { if (p->link == NULL) { // 마지막 노드일 때 if (p->expo == 0) // 마지막 노드의 차수가 0일 때 printf("%d", p->coef); else printf("%dx^%d", p->coef, p->expo); } else { // 마지막 노드가 아닐 때 if (p->coef == NULL) // 첫 노드는 무시 continue; else { if (p->link->coef < 0) { // 다음 노드의 계수가 음수일 때 printf("%dx^%d", p->coef, p->expo); } else { // 다음 노드의 계수가 양수일 때 printf("%dx^%d+", p->coef, p->expo); } } } } } int main(void) { // 첫 번째 다항식 리스트 생성 ListNode *p = (ListNode*)malloc(sizeof(ListNode)); p->coef = p->expo = p->link = NULL; p = insert_last(p, 3, 12); p = insert_last(p, 2, 8); p = insert_last(p, 1, 0); printf("다항식 p: "); print_list(p); // 두 번째 다항식 리스트 생성 ListNode *q = (ListNode*)malloc(sizeof(ListNode)); q->coef = q->expo = q->link = NULL; q = insert_last(q, 8, 12); q = insert_last(q, -3, 10); q = insert_last(q, 10, 6); printf("\n\n다항식 q: "); print_list(q); // 다항식 덧셈 ListNode *r = (ListNode*)malloc(sizeof(ListNode)); r->coef = r->expo = r->link = NULL; poly_add(p, q, r); printf("\n\n다항식 p+q: "); print_list(r); printf("\n"); }