📄 polynomial.c
字号:
/* Demo of polynomial expression, using dynamic link data structure. * * Written by Cyril Hu (cyrilhu@gmail.com), public domain. */#include "my.h"typedef struct pn { int coef; int pow; struct pn *next;} PN;PN *initln(size_t n){ size_t i; PN *t, *head, *p; for(i=0; i<n; i++) { p = mem('m', sizeof(PN)); do { puts("Input coeffienct( coeffienct != 0 ) & power(one bye one, in descending order)"); scanf("%d%d", &p->coef, &p->pow); } while(p->coef == 0); i ? t->next = p : (head = p); t = p; } p->next = NULL; return head;}void pntln(PN *head){ int i; printf("PolyNomial Expression = "); while(head != NULL) { printf("%d*", head->coef); for(i=0; i < head->pow; i++) printf("x*"); printf("\b + "); head = head->next; } printf("\b\b \n");}int compar(PN *p1, PN *p2){ return p1->pow - p2->pow;}void merge(PN *dst, PN **p2){ PN *t; dst->coef += (*p2)->coef; t = (*p2)->next; free(*p2); *p2 = t;}void cmpln(PN *head, PN *p2){ int cmp; PN *p1; if( !(p1 = head->next) || ! p2) { head->next = p2; return; } if( (cmp = compar(p1, p2)) == 0) { merge(p1, &p2); cmpln(head, p2); } else if(cmp>0) cmpln(p1, p2); else { head->next = p2; cmpln(p2, p1); }}PN *addln(PN *p1, PN *p2){ int cmp = compar(p1, p2); PN *head = NULL; if(! p1 && p2) return p2; if(p1 && ! p2) return p1; if(p1 && p2) { if(cmp >= 0) { if(cmp==0) merge(p1, &p2); cmpln(head=p1, p2); } else cmpln(head=p2, p1); } return head;}int main(void){ size_t m,n; PN *p1, *p2; puts("How many nodes to create?"); scanf("%d", &m); p1 = initln(m); pntln(p1); puts("How many nodes to create?"); scanf("%d", &n); p2 = initln(n); pntln(p2); p1 = addln(p1, p2); puts("\nAfter adding 2 polynomial expression together,"); pntln(p1); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -