1、数据结构实验报告题 目 : 一 元 多 项 式 的 实 现学 院 计 算 机 学 院 专 业 软 件 工 程 年 级 班 别 2010 级 4 班 学 号 3110006385 学 生 姓 名 黄 斌 指 导 教 师 李 小 妹 成 绩 _2012 年 6 月 5 日报 告 :内 容 : 详 细 完 整 不 完 整设 计 方 案 : 非 常 合 理 合 理 较 差实 现 : 全 部 实 现 部 分 实 现 未 实 现文 档 格 式 : 规 范 基 本 规 范 不 规 范 答 辩 : 理 解 题 目 透 彻 , 问 题 回 答 流 利 理 解 题 目 较 透 彻 , 回 答 问 题 基 本 正
2、确 部 分 理 解 题 目 , 部 分 问 题 回 答 正 确 未 能 完 全 理 解 题 目 , 答 辩 情 况 较 差总 评 成 绩 : 优 良 中 及 格 不 及 格/编译环境:VC6.0 windows 7 (64 位)1. 题目一元多项式的抽象数据类型的实现:ADT Polynomial数 据 对 象 : D ai | aiTermSet, i=1,2,.,m, m0 TermSet 中 的 每 个 元 素 包 含 一 个 表 示 系 数 的 实 数 和 表 示指 数 的 整 数 数 据 关 系 : R1 |ai-1, aiD, i=2,.,n 基 本 操 作 :CreatPolyn
3、(初 始 条 件 : 一 元 多 项 式 P 存 在 ;操 作 结 果 :打 印 输 出 一 元 多 项 式 P。PolynLength(P);初 始 条 件 : 一 元 多 项 式 P 存 在 ;操 作 结 果 : 返 回 一 元 多 项 式 P 的 项 数 。AddPolyn( / 系数 int expn; / 指数 term, ElemType;/ 两个类型名:term 用于本 ADT,ElemType 为 LinkList 的数据对象名 typedef struct LNode / 结点类型 ElemType data;struct LNode *next;LNode,*Link,*P
4、osition;typedef struct _LinkList / 链表类型 Link head; / 指向线性链表中的头结点 int len; / 指示当前线性链表中数据元素的个数 LinkList,*PLinkList;3. 算法设计/带头结点单链表int OrderInsert(Link p,Link e)/按系数从小到大插入多项式的项,返回值表示项数的变化,-1,0,1 分别表示 减少一项,项数不变,增加一项for(;p-next;p=p-next)if(p-next-data.expn=e-data.expn) break;if(p-next)if(p-next-data.expn
5、=e-data.expn)p-next-data.coef=p-next-data.coef+e-data.coef;free(e);if(p-next-data.coef=0)e=p-next;p-next=p-next-next;free(e);return -1;return 0;elsee-next=p-next;p-next=e;return 1;elsee-next=p-next;p-next=e;return 1;void DestroyPolyn(PLinkList L)/销毁一元多项式Link p,q;p=L-head-next;for(;p;)q=p-next;free(p
6、);p=q;free(L-head);L-len=0;void CreatPolyn(PLinkList L,int m)/创建一元多项式Link p,e;int i;int tag=0;int count=0;p=(Link)malloc(sizeof(LNode);p-data.coef=0.0;p-data.expn=-1;p-next=NULL;L-head=p;for(i=0;idata.coef,tag=OrderInsert(p,e);if(taglen=count;int PolynLength(PLinkList L)/返回多项式的项数return L-len;void Pr
7、intPolyn(PLinkList L)/打印一元多项式Link p;p=L-head-next;printf(“该一元多项式共有 %d 项,多项式如下:n“,PolynLength(L);if(L-len) printf(“P(x)=%.3fx%d“,p-data.coef,p-data.expn);p=p-next;elseprintf(“P(x)=0n“);return ;for(;p;p=p-next)if(p-data.coef0)printf(“+%.3fx%d“,p-data.coef,p-data.expn);elseprintf(“%.3f x%d “,p-data.coe
8、f,p-data.expn);printf(“n“);void AddPolyn(PLinkList La,PLinkList Lb)/多项式相加Link p1,p2,e;int count=0;p1=La-head;p2=Lb-head-next;for(;p2;p2=p2-next)e=(Link)malloc(sizeof(LNode);e-data.coef=p2-data.coef;e-data.expn=p2-data.expn;count=count+OrderInsert(p1,e);DestroyPolyn(Lb);La-len=La-len+count;void Subtr
9、actPolyn(PLinkList La,PLinkList Lb)/多项式相减Link p1,p2,e;int count=0;p1=La-head;p2=Lb-head-next;for(;p2;p2=p2-next)e=(Link)malloc(sizeof(LNode);e-data.coef=-p2-data.coef;e-data.expn=p2-data.expn;count=count+OrderInsert(p1,e);DestroyPolyn(Lb);La-len=La-len+count;void MultiplyPolyn(PLinkList La,PLinkList
10、 Lb)/多项式相乘LinkList Ld;Link e,pa,pb,q;pa=La-head-next;La-head-next=NULL;La-len=0;pb=(Link)malloc(sizeof(LNode);pb-next=NULL;for(;pa;)q=pa-next;e=(Link)malloc(sizeof(LNode);e-data.coef=pa-data.coef;e-data.expn=pa-data.expn;e-next=pb-next;pb-next=e;free(pa);pa=q;pb=pb-next;for(;pb;)q=pb-next;CreatPolyn
11、(pa=Lb-head-next;for(;pa;pa=pa-next)e=(Link)malloc(sizeof(LNode);e-data.coef=pa-data.coef*pb-data.coef;e-data.expn=pa-data.expn+pb-data.expn;OrderInsert(Ld.head,e);AddPolyn(La,free(pb);pb=q;DestroyPolyn(Lb);4测试/带头结点单链表void main()LinkList L,La,Lb;int m;dosystem(“cls“);printf(“-n“);printf(“按键操作指引 :n“)
12、;printf(“创建一个新的一元多项式: 1n“);printf(“打印一元多项式: 2n“);printf(“销毁一元多项式: 3n“);printf(“创建两个一元多项式并相加: 4n“);printf(“创建两个一元多项式并相减: 5n“);printf(“创建两个一元多项式并相乘: 6n“);printf(“-n“);switch(getch()case 1:printf(“请输入多项式的项数:“);scanf(“%d“,CreatPolyn(break;case 2:PrintPolyn(break;case3:DestroyPolyn(break;case 4:printf(“n
13、 一元多项式相加nn 请输入第一个多项式的项数:“);scanf(“%d“,CreatPolyn(PrintPolyn(printf(“请输入第二个多项式的项数: “);scanf(“%d“,CreatPolyn(PrintPolyn(AddPolyn(printf(“相加得到的一元多项式为: n“);PrintPolyn(break;case 5:printf(“n 一元多项式相减nn 请输入第一个多项式的项数:“);scanf(“%d“,CreatPolyn(PrintPolyn(printf(“请输入第二个多项式的项数: “);scanf(“%d“,CreatPolyn(PrintPol
14、yn(SubtractPolyn(printf(“相减得到的一元多项式为: n“);PrintPolyn(break;case 6:printf(“n 一元多项式相乘nn 请输入第一个多项式的项数:“);scanf(“%d“,CreatPolyn(PrintPolyn(printf(“请输入第二个多项式的项数: “);scanf(“%d“,CreatPolyn(PrintPolyn(MultiplyPolyn(printf(“相乘得到的一元多项式为: n“);PrintPolyn(break;default:printf(“指令错误 !n“);printf(“nn 按任何键继续,想退出请按 0 n“);while(getch()!=0);测试结果以及分析初始界面:程序功能指引