Data Structure – Node 이용 다항식 해결

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");
}

Leave a Reply

Your email address will not be published. Required fields are marked *