文档详情

数据结构c语言版实验及源代码.doc

发布:2017-08-17约1.02万字共22页下载文档
文本预览下载声明
实验1 求两个多项式的相加运算(线性表) 编写一个程序用单链表存储多项式,并实现两个多项式相加的函数。 /*文件名:实验1.cpp*/ #include stdio.h #include malloc.h #define MAX 20 /*多项式最多项数*/ typedef struct /*定义存放多项式的数组类型*/ { float coef; /*系数*/ int exp; /*指数*/ } PolyArray[MAX]; typedef struct pnode /*定义单链表结点类型*/ { float coef; /*系数*/ int exp; /*指数*/ struct pnode *next; } PolyNode; void DispPoly(PolyNode *L) /*输出多项式*/ { PolyNode *p=L-next; while (p!=NULL) { printf(%gX^%d ,p-coef,p-exp); p=p-next; } printf(\n); } void CreateListR(PolyNode *L,PolyArray a,int n) /*尾插法建表*/ { PolyNode *s,*r;int i; L=(PolyNode *)malloc(sizeof(PolyNode)); /*创建头结点*/ L-next=NULL; r=L; /*r始终指向终端结点,开始时指向头结点*/ for (i=0;in;i++) { s=(PolyNode *)malloc(sizeof(PolyNode));/*创建新结点*/ s-coef=a[i].coef; s-exp=a[i].exp; r-next=s; /*将*s插入*r之后*/ r=s; } r-next=NULL; /*终端结点next域置为NULL*/ } void Sort(PolyNode *head) /*按exp域递减排序*/ { PolyNode *p=head-next,*q,*r; if (p!=NULL) /*若原单链表中有一个或以上的数据结点*/ { r=p-next; /*r保存*p结点后继结点的指针*/ p-next=NULL; /*构造只含一个数据结点的有序表*/ p=r; while (p!=NULL) { r=p-next; /*r保存*p结点后继结点的指针*/ q=head; while (q-next!=NULL q-next-expp-exp) q=q-next; /*在有序表中找插入*p的前驱结点*q*/ p-next=q-next; /*将*p插入到*q之后*/ q-next=p; p=r; } } } void Add(PolyNode *ha,PolyNode *hb,PolyNode *hc) /*求两有序集合的并*/ { PolyNode *pa=ha-next,*pb=hb-next,*s,*tc; float c; hc=(PolyNode *)malloc(sizeof(PolyNode)); /*创建头结点*/ tc=hc; while (pa!=NULL pb!=NULL) { if (pa-exppb-exp) { s=(PolyNode *)malloc(sizeof(PolyNode)); /*复制结点*/ s-exp=pa-exp;s-coef=pa-coef; tc-next=s;tc=s; pa=pa-next; } else if (pa-exppb-exp) { s=(PolyNode *)malloc(sizeof(PolyNode)); /*复制结点*/ s-exp=pb-exp;s-coef=pb-coef; tc-next=s;tc=s; pb=pb-next; } else /*pa-exp=pb-exp*/ { c=pa-coef+pb-coef; if (c!=0) /*系数之和不为0时创建新结点*/ { s=(PolyNode *)malloc(sizeof(PolyNode)); /*复制结点*/ s-exp=pa-exp;s-coef=c; tc-next=s;tc=s; } pa=pa-next; pb=pb-next; } } if (pb!=
显示全部
相似文档