西安石油大学数据结构数据结构程序设计报告设计一个一元稀疏多项式简单计算器和集合的并交和差运算Word格式.docx
- 文档编号:22355724
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:23
- 大小:141.04KB
西安石油大学数据结构数据结构程序设计报告设计一个一元稀疏多项式简单计算器和集合的并交和差运算Word格式.docx
《西安石油大学数据结构数据结构程序设计报告设计一个一元稀疏多项式简单计算器和集合的并交和差运算Word格式.docx》由会员分享,可在线阅读,更多相关《西安石油大学数据结构数据结构程序设计报告设计一个一元稀疏多项式简单计算器和集合的并交和差运算Word格式.docx(23页珍藏版)》请在冰豆网上搜索。
stdlib.h>
//结点结构体
typedefstructPolyNode
{
floatcoef;
//系数域
intexp;
//指数域
structPolyNode*next;
//指针域
}*Poly,PolyNode;
//1、按指数降序插入多项式
voidInsert(Polyp,Polyh)
//2、创建多项式(带有头结点且有m项)
PolyCreate(Polyhead,intm)
//3、对两个多项式进行比较判别
//4、实现多项式相加
//5、实现多项式相减(思想:
兩数相减=两个正数的相反数相减)
//6、输出多项式
voidPrint(PolyP)
//7、销毁多项式(使用完后用于退出,释放空间)
测试主intmain()
intm,n,flag=0;
Polypa=0,pb=0,pc,pd;
//输出菜单
printf("
**************************************************************************\n"
);
1.输入多项式2.输出多项式a和b3.建立多项式a+b4.建立多项式a-b5.退出程序\n"
for(;
;
flag=0)
执行操作为:
"
);
scanf("
%d"
&
flag);
if(flag==1)
//定义各式的头指针,pa与pb在使用前付初值NULL
请输入a的项数:
m);
pa=CreateList(pa,m);
//建立多项式a
请输入b的项数:
);
n);
pb=CreateList(pb,n);
//建立多项式b
}
if(flag==2)
多项式a为:
OutputList(pa);
多项式b为:
OutputList(pb);
continue;
}
if(flag==3)
pc=AddPoly(pa,pb);
多项式a+b为:
OutputList(pc);
DestroyList(pc);
if(flag==4)
pd=SubtractPoly(pa,pb);
多项式a-b为:
OutputList(pd);
DestroyList(pd);
if(flag==5)
break;
if(flag<
1||flag>
5)
输入错误!
!
请重新选择!
\n"
DestroyList(pa);
DestroyList(pb);
return0;
函数:
7、源程序:
intmain()
八、测试情况:
(1)
(2)测试结果分析:
程序设计结果和人工模拟分析过程完全相同,说明程序正确。
(3)思想感悟:
经过这次的课程设计,我学到了好多,也越发的感觉到自己不知道的东西很多,一开始,对多项式的创建一窍不通,感觉很难,无法入手,后来,经过上网查询,与队友的讨论,逐渐有了头绪,慢慢写出了程序,第一次运行时,错误很多,改了好多次,终于成功了,让我感觉到了团队的力量!
上级实验报告
(二)
一、题目:
集合的并、交和差运算
(1)创建单链表用于存储集合,存储好集合在输出时按字母排好顺序输出。
(2)设计出其运算的合并、求交、求差函数。
(3)再设计一个释放空间的函数用于退出系统操作。
(4)设计一个测试主函数,实现对基于顺序队列结构的集合运算的测试。
(5)为了界面显示友好期间可以设计一下输出后的界面格式。
三、基本功能
编制一个能演示执行集合的并、交和差运算的程序。
四、基本要求
(1)集合的元素限定为小写字母字符[‘a’..’z’];
(2)演示程序以用户和计算机的对话方式执行。
五、测试数据
(1)Set1=”magazine”,Set2=”paper”,
Set1∪Set2=”aegimnprz”,Set1∩Set2=”ae”,Set1-Set2=”gimnz”;
(2)Set1=”012oper4a6tion89”,Set2=”errordata”,
Set1∪Set2=”adeinoprt”,Set1∩Set2=”aeort”,Set1-Set2=”inp”。
六、算法思想:
创建一个单链表用于存储一个集合,限定集合元素字母为“a”—“z”,计算出集合的长度以用于对集合中的元素排序,排序时从第一个元素开始逐个向后比较。
计算时,合并思想为:
将两个集合进行比较,有相同元素时只输入一个,元素不同时均输入;
求交思想:
两个集合比较将相同的元素输出;
求差思想:
用第一个集合中的元素和第二个集合比较,如果相同就删除,最后输出剩余的元素。
利用销毁和清空方法释放占据的空间,最后在主函数中将集合按不同的要求提示进行函数调用实现。
七、模块划分:
头文件:
#include<
#defineElemTypechar//宏定义一个字符型的元素类型,以下使用不用定义
//定义集合结构体
typedefstructElemNode
ElemTypeelem;
//集合元素域
structElemNode*next;
}*Set,ElemNode;
//1、计算一个集合的长度用于对集合排序
intLength(Setsrc)
//2、创建一个从a-z字母集合
voidCreate(Setdest)
//3、清空一个集合
voidEmpty(Setdest)
//4、销毁集合
voidDestroy(Setdest)
//5、对一个字母集合进行从小到大的排序
voidSort(Setdest)
//6、打印集合的所有元素
voidDisplay(Setsrc)
//7、判断元素是否存在于集合中
intExistElem(Setdest,ElemTypee)
//8、删除集合中的一个元素一次
voidDelElem(Setdest,ElemTypee)
//9、在链表尾部追加一个元素
voidAddElem(Setdest,ElemTypee)
//10、集合合并运算
voidAdd(Setdest,Setsrc1,Setsrc2)
//11、集合求交集运算
voidMul(Setdest,Setsrc1,Setsrc2)
//12、集合求差运算
voidSubtract(Setdest,Setsrc1,Setsrc2)
//测试主函数
八、源程序:
inti=0;
while(src->
next!
=NULL)//集合元素不为空时i+1
{i++;
src=src->
next;
//依次向后
}
returni;
ElemTypech;
Setp=dest,n;
)
{
ch=getchar();
//输入字符
if(ch=='
\n'
)//遇到换行(一个集合输入完成)就返回终止
break;
if(ch<
97||ch>
122)//输入的字符不属于a-z就终止运行,用于实现限定元素功能
continue;
n=(Set)malloc(sizeof(ElemNode));
//为集合n分配存储空间
p->
next=n;
n->
elem=ch;
//将字符插入集合
next=NULL;
p=n;
return;
{Setp,n;
while(dest->
=NULL)
p=dest;
n=p->
for(;
n->
next!
=NULL;
p=n;
n=n->
}free(n);
//4、销毁集合
Empty(dest);
free(dest);
inti,j,l,flag;
Setp,q,n;
l=Length(dest);
if(l<
2)return;
flag=1;
for(i=l-1;
i>
0&
&
flag==1;
i--)
flag=0;
p=dest;
q=p->
n=q->
for(j=0;
j<
i;
j++)
{if(q->
elem>
elem){
flag=1;
p->
q->
next=n->
next=q;
n=q->
p=q;
q=n;
//6、打印集合的所有元素
{Setp;
if(src->
next==NULL)
printf("
φ"
return;
p=src;
p=p->
putchar(p->
elem);
}while(p->
=NULL);
Setp=dest;
if(Length(p)==0)return0;
else{p=p->
while(p->
elem!
=e)
if(p->
next==NULL)return0;
p=p->
return1;
Setp=dest,q;
if(Length(p)==0)return;
q=p->
if(Length(p)==1)
next=NULL;
free(q);
while(q->
elem!
=e)
q=q->
if(q->
next==NULL)
Elsep->
next=q->
//9、在链表尾部追加一个元素
Setp=dest,n;
=NULL)p=p->
n=(Set)malloc(sizeof(ElemNode));
next=n;
n->
elem=e;
//10、集合合并运算
Sort(src1);
Sort(src2);
inti=0,j=0,len1=Length(src1),len2=Length(src2);
src1=src1->
src2=src2->
while(i<
len1&
j<
len2)
if(src1->
elem<
=src2->
elem)
i++;
if(!
ExistElem(dest,src1->
elem))
AddElem(dest,src1->
src1=src1->
}else
src1=src1->
j++;
ExistElem(dest,src2->
AddElem(dest,src2->
src2=src2->
len1)
while(j<
Sort(src2);
inti=0,j=0;
intlen1=Length(src1),len2=Length(src2);
src2=src2->
len1&
elem<
src2->
elem){i++;
src1=src1->
elseif(src1->
elem){j++;
else{
j++;
//12、集合求差运算
inti=0;
intlen=Length(src1);
len)
ExistElem(src2,src1->
}else{
{inta,f;
Setdest=(Set)malloc(sizeof(ElemNode));
Setsrc1=(Set)malloc(sizeof(ElemNode));
Setsrc2=(Set)malloc(sizeof(ElemNode));
dest->
********************************\n"
*\t欢迎使用集合运算系统*\n"
*请输入两个集合:
Create(src1);
Create(src2);
*Set1="
Display(src1);
printf("
*Set2="
Display(src2);
*********************************\n"
******集合运算的操作菜单******\n"
*\t1、求解集合的并\t*\n"
*\t2、求解集合的交\t*\n"
*\t3、求解集合的差\t*\n"
*\t4、退出系统\t*\n"
while(a)
请输入您要执行操作的选项:
scanf("
f);
switch(f){
case1:
集合并运算:
Set1∪Set2="
Add(dest,src1,src2);
Display(dest);
Empty(dest);
break;
case2:
集合交运算:
Set1∩Set2="
Mul(dest,src1,src2);
case3:
集合差运算:
Set1-Set2="
Subtract(dest,src1,src2);
case4:
*感谢使用我的集合运算操作系统!
Destroy(dest);
a=0;
\n
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西安石油 大学 数据结构 程序设计 报告 设计 一个 一元 稀疏 多项式 简单 计算器 集合 运算
链接地址:https://www.bdocx.com/doc/22355724.html