顺序表的实 链表的实现多项式求和 约瑟夫环.docx
- 文档编号:27671494
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:15
- 大小:292.97KB
顺序表的实 链表的实现多项式求和 约瑟夫环.docx
《顺序表的实 链表的实现多项式求和 约瑟夫环.docx》由会员分享,可在线阅读,更多相关《顺序表的实 链表的实现多项式求和 约瑟夫环.docx(15页珍藏版)》请在冰豆网上搜索。
顺序表的实链表的实现多项式求和约瑟夫环
《数据结构C》课程实验报告
课程实验题目:
线性表的实现及应用
学院:
自动化学院
班级:
学号:
姓名:
指导教师姓名:
陈燕
完成时间:
2018-4-18
一.设计目的
熟悉线性表和链表的创建和应用。
二.设计内容
(1)顺序表的实现;
(2)链表的实现;
(3)多项式求和;
(4)约瑟夫环。
三.概要设计
1.功能模块图;
2.各个模块详细的功能描述;
1,顺序表的实现:
结构体:
定义数据域以及长度
创建:
用户输入顺序表的长度,然后循环输入数据。
main:
调用创建函数
2,链表的实现:
结构体:
声明节点的数据域和指针域。
创建:
根据传的数组参数创建链表结构。
main:
将用户输入的数据拿数组接收,调用创建函数时传给该函数。
3,多项式求和:
结构体:
定义两个数据域分别存储多项式的系数和指数,以及一个指针域。
创建:
创建链式结构。
求和函数:
根据传入的未知数x的值,计算求和。
main:
键入多项式元素的个数然后调用创建函数,将x的值传给求和函数,接受返回值。
4,约瑟夫环:
结构体:
声明数据域和指针域。
创建:
创建循环链表。
main:
输入环的节点个数以及出队的间隔。
循环遍历,直到环上只有一个节点。
3.功能函数的调用关系图.
(1)顺序表的实现
(2)链表的实现
(3)多项式求和
(4)约瑟夫环
四.详细设计
1.主要功能函数的数据流程图;
(1)顺序表的实现
(2)链表的实现
(3)多项式求和
4
3
2
1
(4)约瑟夫环
2.重点设计及编码。
(1)顺序表的实现
<1>声明结构体,有一个int类型的数组和长度。
typedefstruct{
intdata[20];
intlength;
}SeqList;
<2>根据输入的个数,循环输入数据来创建。
SeqListcreate(SeqList&L){
intnum;
printf("输入创建的元素个数:
");
scanf("%d",&num);
for(inti=0;i printf("请输入第%d个元素: ",i+1); scanf("%d",&L.data[i]); L.length++; } print(L); returnL; } <3>增删改查 voidadd(SeqList&L){ intnext; printf("输入要添加的元素: "); next=L.length; scanf("%d",&L.data[next]); L.length++; printf("添加成功: \n"); print(L); } voiddel(SeqList&L){ print(L); intdelNumber; printf("输入要删除第几个元素: "); scanf("%d",&delNumber); for(inti=delNumber;i L.data[i-1]=L.data[i]; } L.length--; printf("删除成功: \n"); print(L); } voidmodify(SeqList&L){ printf("输入要修改第几个元素和新数值: "); intindex,num; scanf("%d%d",&index,&num); L.data[index-1]=num; printf("修改成功: \n"); print(L); } intselect(SeqList&L){ printf("输入要查询第几个元素: "); intindex; scanf("%d",&index); printf("第%d个元素是%d\n",index,L.data[index-1]); printf("查询成功: \n"); } (2)链表的实现 <1>定义结构体 typedefstructnode{ intdata; structnode*next; }ElemSN; <2>根据传入的数据和长度递归创建链表。 ElemSN*Create(inta[],intn){ ElemSN*h; if(n) { h=(ElemSN*)malloc(sizeof(ElemSN)); h->data=a[0]; h->next=Create(a+1,n-1); returnh; } if(! n)returnNULL; } (3)多项式求和 <1>定义结构体 typedefstructnode{ intdata1; intdata2; structnode*next; }Duo; <2>结构的创建,两个数据域,一个指针域。 Duo*create(intnum){ //建链 Duo*h,*t; h=t=(Duo*)malloc(sizeof(Duo)); h->next=NULL; for(inti=1;i<=num;i++){ t=t->next=(Duo*)malloc(sizeof(Duo)); printf("请输入第%d个系数: ",i); scanf("%d",&t->data1); printf("请输入第%d个幂次: ",i); scanf("%d",&t->data2); t->next=NULL; } returnh; } <3>根据传入的x的值求和。 intcal(Duo*h,intx){ intsum=0,temp=x; for(h=h->next;h;h=h->next){ if(h->data2==0){ sum+=h->data1; continue; } else{ for(inti=0;i temp*=temp; } } sum+=h->data1*temp; temp=x; } returnsum; } (4)约瑟夫环 <1>定义结构体 typedefstructnode{ intdata; structnode*next; }Link; <2>创建循环链表。 Link*create(intnum){ Link*h,*t,*p1; inti=1; h=t=(Link*)malloc(sizeof(Link));//创建头结点 h->data=i++;//初始化 h->next=NULL; for(;i<=num;i++){//创建中间结点和尾结点 p1=(Link*)malloc(sizeof(Link)); p1->data=i; p1->next=NULL; t->next=p1; t=p1; } t->next=h; returnh;//返回头结点 } <3>出队函数function。 voidfunction(Link*h,intlen){ while(h->next! =h){ for(inti=1;i h=h->next; len--; } p=h->next;//p是被点到的人 printf("%d\n",p->data); h->next=p->next; h=h->next; free(p); } printf("最后一个节点是: %d",h->data); } 五.测试数据及运行结果 1.正常测试数据(3组)及运行结果; (1)链表的实现 (2)顺序表的实现 (3)多项式求和 (4)约瑟夫环 2.非正常测试数据(2组)及运行结果。 六.调试情况,设计技巧及体会 1.对自己的设计进行评价,指出合理和不足之处,提出改进方案; 答: 这次的程序虽然最终实现了预期的功能,但是我在程序的算法设计与实现方面还有很大的缺陷,以后应当多学习,多练习算法,提升自己的算法实力 2.对设计及调试过程的心得体会。 答: 在课堂上老师讲的都已经听明白了,但是在实际的上机练习的过程中总是出错,这不仅反映了自己缺乏练习,更是对上课知识点掌握的不够熟练。 自己后面应多加练习。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 顺序表的实 链表的实现多项式求和 约瑟夫环 顺序 实现 多项式 求和 约瑟夫