您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页逆波兰式

逆波兰式

来源:华佗小知识
#include #include #include

typedef struct{ float coef; //系数 int expn; //指数 }DataType;

typedef struct node{ DataType data; struct node *next; }ListNode,*LinkList;

int LocateNode(LinkList L,DataType e) { ListNode *p=L->next; while(p && e.expndata.expn) p=p->next; if (p==NULL || e.expn!=p->data.expn) return 0; //查找失败 else return 1; //查找成功 }

LinkList InsertNode(LinkList L,DataType e) { ListNode *s,*p; p=L; while(p->next && p->next->data.expn>e.expn) p=p->next; s=(ListNode *)malloc(sizeof(ListNode)); s->data.coef=e.coef; s->data.expn=e.expn; s->next=p->next; p->next=s; return(L); }

LinkList CreatPolyn(int n) { LinkList pa; int i;

DataType e; pa=(ListNode *)malloc(sizeof(ListNode)); pa->next=NULL; for(i=1;i<=n;i++) { scanf(\"%f,%d\ if (!LocateNode(pa,e)) pa=InsertNode(pa,e); } return(pa); }

void printList(LinkList L) { ListNode *p; p=L->next; while(p) { printf(\"%c %fx^%d\ p=p->next; } printf(\"\\n\"); }

LinkList AddPolyn(LinkList La,LinkList Lb) { ListNode *pa,*pb,*pc,*s,*Lc; float sum; pa=La->next;pb=Lb->next;Lc=pc=La; while(pa && pb) { if(pa->data.expn>pb->data.expn) { pc->next=pa;pc=pa;pa=pa->next; } else if(pa->data.expndata.expn) { pc->next=pb;pc=pb;pb=pb->next; } else { sum=pa->data.coef+pb->data.coef; if(fabs(sum)>1e-6) { pa->data.coef=sum;

pc->next=pa;pc=pa;pa=pa->next;s=pb;pb=pb->next;free(s); } else { s=pa;pa=pa->next;free(s); s=pb;pb=pb->next;free(s); } } } pc->next=pa?pa:pb; free(Lb); return(Lc); }

void main() { LinkList La,Lb,Lc; int n; printf(\"输入第一个多项式的项数:\"); scanf(\"%d\ printf(\"输入第一个多项式的每一项的系数,指数:\\n\"); La=CreatPolyn(n); printf(\"第一个多项式为:\"); printList(La); printf(\"输入第二个多项式的项数:\"); scanf(\"%d\ printf(\"输入第二个多项式的每一项的系数,指数:\\n\"); Lb=CreatPolyn(n); printf(\"第二个多项式为:\"); printList(Lb); Lc=AddPolyn(La,Lb); printf(\"\\n相加后的和多项式为:\"); printList(Lc); getchar(); getchar(); }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务