Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- nvidia docker
- python
- 스트림셋
- c++
- 데이터베이스
- 도커 elk
- 푸시푸시
- docker
- 도커
- java
- 스트림셋이란?
- 코딩
- c
- MySQL
- elk stack
- mysql docker
- C언어
- 도커 시작하기
- mysql on docker
- 파이썬
- 자바
- 알고리즘
- 데이트
- 클라우드
- 정보처리기사
- streamsets 강의
- ansible install
- 앤서블 설치
- 백준
- 도커 mysql
Archives
- Today
- Total
리그캣의 개발놀이터
자료구조 - 다항식 리스트 퀴즈1(C언어) 본문
다항식 리스트 퀴즈1
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 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | #include <stdio.h> #include <stdlib.h> typedef struct ListNode{ //다항식 리스트의 노드 구조 정의 float coef; int expo; struct ListNode *link; }ListNode; typedef struct ListHead{ //다항식 리스트의 헤더 노드 구조 정의 ListNode *head; }ListHead; ListHead *createLinkedList(void) //공백 다항식 리스트 생성 연산 { ListHead *L; L=(ListHead *)malloc(sizeof(ListHead)); L->head=NULL; return L; } void addLastNode(ListHead *L,float coef, int expo)//다항식 리스트에 마지막 노드 삽입 연산 { ListNode *newNode; ListNode *p; newNode = (ListNode *)malloc(sizeof(ListNode)); newNode->coef=coef; newNode->expo=expo; newNode->link=NULL; if(L->head==NULL){ //현재 다항식 리스트가 공백인 경우, L->head=newNode; return; } else //현재 다항식 리스트가 공백이 아닌경우, { p=L->head; while(p->link!=NULL){ //라스트의 마지막 노드를 찾아서 p=p->link; } p->link=newNode; //현재의 마지막 노드 뒤에 새 노드를 연결한다. } } void addPoly(ListHead *A, ListHead *B, ListHead *C) //두 다항식의 합을 구하는 연산 { ListNode *pA=A->head; ListNode *pB=B->head; float sum; while(pA&&pB){ //두다항식에 노드가 있는 동안 반복 수행 if(pA->expo==pB->expo){ //다항식 A의 지수가 다항식 B의 지수와 같은 경우 sum=pA->coef+pB->coef; addLastNode(C,sum,pA->expo); pA=pA->link,pB=pB->link; } else if(pA->expo>pB->expo){ //다항식 A의 지수가 다항식 B의 지수보다 큰 경우 addLastNode(C,pA->coef,pA->expo); pA=pA->link; } else if(pA->expo<pB->expo){ //다항식 B의 지수가 다항식 A의 지수보다 큰 경우 addLastNode(C,pB->coef,pB->expo); pB=pB->link; } } for(;pA!=NULL;pA=pA->link) addLastNode(C,pA->coef,pA->expo); for(;pB!=NULL;pB=pB->link) addLastNode(C,pB->coef,pB->expo); } void minusPoly(ListHead *A, ListHead *B, ListHead *C) //두 다항식의 합을 구하는 연산 { ListNode *pA=A->head; ListNode *pB=B->head; float minus1,minus2; while(pA&&pB){ //두다항식에 노드가 있는 동안 반복 수행 if(pA->expo==pB->expo){ //다항식 A의 지수가 다항식 B의 지수와 같은 경우 if((pA->coef)>(pB->coef)) { minus1=(pA->coef)-(pB->coef); addLastNode(C,minus1,pA->expo); pA=pA->link,pB=pB->link; } else if((pA->coef)<(pB->coef)) { minus2=(pB->coef)-(pA->coef); addLastNode(C,minus2,pB->expo); pA=pA->link,pB=pB->link; } else{ pA=pA->link,pB=pB->link; } } else if(pA->expo>pB->expo){ //다항식 A의 지수가 다항식 B의 지수보다 큰 경우 addLastNode(C,pA->coef,pA->expo); pA=pA->link; } else if(pA->expo<pB->expo){ //다항식 B의 지수가 다항식 A의 지수보다 큰 경우 addLastNode(C,-(pB->coef),pB->expo); pB=pB->link; } } for(;pA!=NULL;pA=pA->link) addLastNode(C,pA->coef,pA->expo); for(;pB!=NULL;pB=pB->link) addLastNode(C,-(pB->coef),pB->expo); } void printPoly(ListHead *L) //다항식 리스트를 출력하는 연산 { ListNode *p=L->head; for(;p;p=p->link){ printf("%3.0fx^%d",p->coef,p->expo); } } void main(void){ ListHead *A,*B,*C,*D; A=createLinkedList(); //공백 다항식 리스트 A,B,C 생성하기 B=createLinkedList(); C=createLinkedList(); D=createLinkedList(); addLastNode(A,4,3); //다항식 리스트 A에 4x^3 노드 추가 addLastNode(A,3,2); //다항식 리스트 A에 3x^2 노드 추가 addLastNode(A,5,1); //다항식 리스트 A에 5x^1 노드 추가 printf("\n A(x)="); printPoly(A); //다항식 리스트 A 출력하기 addLastNode(B,3,4); //다항식 리스트 B에 3x^4 노드 추가 addLastNode(B,1,3); //다항식 리스트 B에 1x^3 노드 추가 addLastNode(B,2,1); //다항식 리스트 B에 2x^1 노드 추가 addLastNode(B,1,0); //다항식 리스트 B에 1x^0 노드 추가 printf("\n B(x)="); printPoly(B); //다항식 리스트 B 출력하기 addPoly(A,B,C); //다항식의 덧셈 연산 수행 printf("\n C(x)="); printPoly(C); //다항식 리스트 C출력하기 minusPoly(C,A,D); printf("\n D(x)="); printPoly(D); getchar(); } | cs |
'프로그래밍 기본 > 자료구조' 카테고리의 다른 글
자료 구성의 단위 정리 (0) | 2018.02.09 |
---|---|
자료구조 - STACKNODE 사용[C언어] (0) | 2018.01.21 |
자료구조 - 구조체 이용하기[C언어] (0) | 2018.01.21 |
자료구조 - 일차원 배열을 이용하여 출력(C언어) (0) | 2018.01.21 |
자료구조 - 알파벳 소문자는 대문자로 대문자는 소문자로[C언어] (0) | 2018.01.21 |
Comments