<들어가기에 앞서>
c언어로 작성되었습니다.
<프로그램 개요>
다항식 2개를 준비하여 다항식끼리 더한 결과 값을 다항식으로 출력합니다.
<소스 코드>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
#include <stdio.h>
#include <stdlib.h>_dbdao.h
typedef struct ListNode
{
int coef;
int expon;
struct ListNode *link;
} ListNode;
typedef struct ListType
{
int size;
ListNode *head;
ListNode *tail;
} ListType;
void error(char *message)
{
fprintf(stderr,"%s\n",message);
exit(1);
}
ListType *create()
{
ListType *plist = (ListType *)malloc(sizeof(ListType));
plist->size = 0;
plist->head = plist->tail = NULL;
return plist;
}
void insert_last(ListType *plist,int coef,int expon)
{
ListNode *temp = (ListNode *)malloc(sizeof(ListNode));
if (temp == NULL) error("메모리 할당 에러");
temp->coef = coef;
temp->expon = expon;
temp->link = NULL;
if (plist->tail == NULL)
plist->head = plist->tail = temp;
else
{
plist->tail->link = temp;
plist->tail = temp;
}
plist->size++;
}
void poly_add(ListType *plist1, ListType *plist2, ListType *plist3)
{
ListNode *a = plist1->head;
ListNode *b = plist2->head;
int sum;
while (a && b)
{
if (a->expon == b->expon)
{
sum = a->coef + b->coef;
if (sum != 0) insert_last(plist3,sum,a->expon);
a = a->link; b = b->link;
}
else if (a->expon > b->expon)
{
insert_last(plist3,a->coef,a->expon);
a = a->link;
}
else
{
insert_last(plist3,b->coef,b->expon);
b = b->link;
}
}
for (; a != NULL; a = a->link)
insert_last(plist3,a->coef,a->expon);
for (; b != NULL; b = b->link)
insert_last(plist3,b->coef,b->expon);
}
void poly_print(ListType *plist)
{
ListNode *p = plist->head;
printf("polynomial = ");
for (; p != NULL; p = p->link)
printf("%d^%d + ",p->coef,p->expon);
puts("");
}
int main(void)
{
ListType *list1,*list2,*list3;
list1 = create();
list2 = create();
list3 = create();
insert_last(list1,3,12);
insert_last(list1,2,8);
insert_last(list1,1,0);
insert_last(list2,8,12);
insert_last(list2,-3,10);
insert_last(list2,10,6);
poly_print(list1);
poly_print(list2);
poly_add(list1,list2,list3);
poly_print(list3);
free(list1); free(list2); free(list3);
return 0;
}
|
cs |
<그림>
void insert_last(ListType *plist,int coef, int expon); 함수의 이해가 쉽게 되지 않아 그림으로 그려보았습니다.
1) *plist의 초기 상태입니다.

2) void insert_last(ListType *plist, int coef, int expon) 함수가 한 번 실행된 상태입니다.

3) void insert_last(ListType *plist, int coef, int expon) 함수가 두 번 실행된 상태입니다.

4) void insert_last(ListType *plist, int coef, int expon) 함수가 여러 번 실행되다 보면 결국 이런 식으로 노드들이 뻗어 나갈 것입니다.

틀린 부분 있으면 피드백 부탁드립니다.
감사합니다. 좋은 하루 보내세요~!
'자료구조' 카테고리의 다른 글
자료구조) 역순 연결 리스트(reverse linked list) (4) | 2020.06.01 |
---|---|
알고리즘) 선택 정렬(Selection Sort) (2/2) (0) | 2020.05.23 |
알고리즘) 선택 정렬(Selection Sort) (1/2) (0) | 2020.05.23 |
자료구조) Queue를 이용한 은행 시뮬레이션 프로그램 (1) | 2020.05.04 |