ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:141.02KB ,
资源ID:10185212      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10185212.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构实验报告 2.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构实验报告 2.docx

1、数据结构实验报告 2数据结构实验报告实验4学号: 姓名: 得分:_一、实验目的1、复习线性表的逻辑结构、存储结构及基本操作;2、掌握顺序表和(带头结点)单链表;3、了解有序表。二、实验内容1、(必做题)假设有序表中数据元素类型是整型,请采用顺序表或(带头结点)单链表实现:(1)OrderInsert(&L, e, int (*compare)(a, b)/根据有序判定函数compare,在有序表L的适当位置插入元素e;(2)OrderInput(&L, int (*compare)(a, b)/根据有序判定函数compare,并利用有序插入函数OrderInsert,构造有序表L;(3) Or

2、derMerge(&La, &Lb, &Lc, int (*compare)()/根据有序判定函数compare,将两个有序表La和Lb归并为一个有序表Lc。2、(必做题)请实现:(1)升幂多项式的构造,升幂多项式是指多项式的各项按指数升序有序,约定系数不能等于0,指数不能小于0;(2)两个升幂多项式的相加。三、算法描述(采用自然语言描述)1. 创建带头节点的链表,输入两个有序表数据La Lb归并两个有序表得有序表Lc输出三个有序表输入需插入数据e将e插入有序表Lc输出插入e后的Lc2.创建链表按指数升序输入多项式得序数和指数输出多项式按指数升序输入第二个多项式得序数和指数两个多项式相加输出第

3、二个多项式和两个多项式得和四、详细设计(画出程序流程图)1.2.五、程序代码(给出必要注释)1.#include#includetypedef struct LNode int date; struct LNode *next; LNode,*Link;typedef struct LinkList Link head;/头结点 int lenth;/链表中数据元素的个数 LinkList;int compare (LinkList *L,int e)/有序判定函数 compare int Lc=0; Link p; p=L-head; p=p-next; while(p!=NULL) if(

4、ep-date) p=p-next; Lc+; else return Lc; return Lc;void OrderInsert (LinkList *L,int e,int (*compare)()/根据有序判定函数compare,在有序表L的适当位置插入元素e; Link temp,p,q; int Lc,i; temp=(Link)malloc(sizeof(LNode); temp-date=e; p=q=L-head; p=p-next; Lc=(*compare)(L,e); if(Lc=L-lenth) while(q-next!=NULL) q=q-next; q-next

5、=temp; temp-next=NULL; else for(i=0; inext; q=q-next; q-next=temp; temp-next=p; +L-lenth;void OrderMerge (LinkList *La,LinkList *Lb,int (*compare)()/根据有序判定函数 compare ,将两个有序表 La 和 Lb 归并为一个有序表 int i,Lc=0; Link temp,p,q; q=La-head-next; while(q!=NULL) p=Lb-head; temp=(Link)malloc(sizeof(LNode); temp-da

6、te=q-date; Lc=(*compare)(Lb,q-date); if(Lc=Lb-lenth) while(p-next!=NULL) p=p-next; p-next=temp; temp-next=NULL; else for(i=0; inext; temp-next=p-next; p-next=temp; q=q-next; +Lb-lenth; LinkList *Initialize (LinkList *NewList) int i; Link temp; NewList=(LinkList *)malloc(2+1)*sizeof(LinkList); for(i=

7、0; idate=0; temp-next=NULL; (NewList+i)-head=temp; (NewList+i)-lenth=0; return NewList;void Insert (LinkList *NewList) int a,i; char c; printf(在第1个表中插入数据,输入“ N ”再对下个表插入数据 n); for(i=0; i2; i+) while(1) scanf(%d,&a); c=getchar(); if(c=N) if(ihead-next; while(p!=NULL) printf(%d ,p-date); p=p-next; void

8、 visit(LinkList *NewList,void (*Show)() printf(有序表如下:n); printf(第一个有序表为:n); (*Show)(NewList+0); printf(n); printf(第二个有序表为:n); (*Show)(NewList+1); printf(n); printf(归并后有序表为:n); (*Show)(NewList+2); printf(n);int main() LinkList *NewList=NULL; LinkList *L; int i, e; printf(请按要求输入数据n); NewList=Initializ

9、e(NewList); Insert(NewList); for(i=0; i2; i+) OrderMerge (NewList+i,NewList+2,compare); visit(NewList,Show); L=NewList; printf(n请输入将要插入的e:n); scanf(%d,&e); OrderInsert(NewList+i),e,compare); printf(对归并后有序表插入e后得n); Show(NewList+2); return 0;2.#include#includetypedef struct node int xi; int zi; struct

10、 node *next; Node;Node *Creat()/用链表储存多项式的序数与指数 Node *head,*p,*q; int or,in; head=(Node *)malloc(sizeof(Node); head-next=NULL; q=head; printf(请输入多项式的序数与指数n(注意:按照指数升序输入,系数不能等于0且指数不能小于0,序数与指数用空格隔开,并以0 0结束输入)n); scanf(%d %d,&or,&in); while(or) p=(Node *)malloc(sizeof(Node); p-xi=or; p-zi=in; p-next=q-ne

11、xt; q-next=p; q=p; scanf(%d %d,&or,&in); return head;void visit(Node *head) /输出多项式 Node *p=head-next; while(p) printf(%dX%d+,p-xi,p-zi); p=p-next; printf(NULLnn);Node *Add(Node *head1,Node *head2)/多项式相加 Node *p,*head,*p1,*p2; int sum; head=(Node *)malloc(sizeof(Node); p=head; p1=head1-next; p2=head2

12、-next; while(p1&p2) /当两多项式都存在时 if(p1-zi=p2-zi) /如果指数相等 sum=p1-xi+p2-xi; if(sum) p1-xi=sum; p-next=p1; p=p1; p1=p1-next; p2=p2-next; else /指数不相等分两种情况 if(p1-zizi) p-next=p1; p=p1; p1=p1-next; else p-next=p2; p=p2; p2=p2-next; if(p1) p-next=p1; /将1中剩余结点接到和链表中 因为最终只剩下一段链表多项式 else p-next=p2; /将2中剩余结点接到和链

13、表中 这段链的链头接到目标链表就可以了 return head;int main() printf(请输入第一个多项式n); Node *head,*p1,*p2; p1=Creat(); printf(多项式为:n); visit(p1); printf(请输入第二个多项式n); p2=Creat(); printf(多项式为:n); visit(p2); head=Add(p1,p2); printf(n多项式相加后得:n); visit(head); return 0;六、测试和结果(给出测试用例,并给出测试结果)1.2.七、用户手册(告诉用户如何使用程序,使用注意事项等)1.按照要求输入

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1