数据结构实验一.docx
- 文档编号:9684070
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:18
- 大小:104.28KB
数据结构实验一.docx
《数据结构实验一.docx》由会员分享,可在线阅读,更多相关《数据结构实验一.docx(18页珍藏版)》请在冰豆网上搜索。
数据结构实验一
天津理工大学实验报告
学院(系)名称:
计算机与通信工程学院
姓名
学号
专业
班级
实验项目
线性表的应用
课程名称
数据结构与算法
课程代码
0661013
实验时间
2016.3.15
实验地点
主校区软件实验室7-215
批改意见
成绩
教师签字:
实验目的:
通过实验使学生掌握顺序表或链表增删该查等基本操作的算法实现。
实验项目:
①约瑟夫环问题:
以顺序和链式存储两种结构实现约瑟夫环问题。
②实现一元稀疏多项式简单的计算器(加、减运算等)。
实现长整数四则运算演示程序。
实验内容:
一、以顺序表实现约瑟夫环问题。
源程序:
#include
#include
#defineM_s100
structSqList
{
intData[M_s];
intlength;
};
typedefstructSqListSqList;
voidInitList(SqList*&L)
{
L=(SqList*)malloc(sizeof(SqList));
L->length=0;
}
voidCreateList(SqList*&L)
{
inti;
intpeople;
printf("请输入参加报数的人数:
\n");
scanf("%d",&people);
for(i=0;i { L->Data[i]=i+1; printf("%d",L->Data[i]); } printf("\n"); L->length=people; } voidDisplayList(SqList*L) { intm=0,i=0,j=0,k=0,k1=0; printf("请输入开始报数的人: \n"); scanf("%d",&k); printf("请输入报数出队的次数: \n"); scanf("%d",&m); k=k-1; for(i=L->length;i>0;i--) { k=(k+m-1)%i; printf("%d",L->Data[k]); for(j=k;j { L->Data[j]=L->Data[j+1]; } L->length=L->length-1; } printf("\n"); } intmain() { SqList*L; InitList(L); CreateList(L); DisplayList(L); } 二、以循环链表实现约瑟夫环问题 源程序: #include #include #include #defineN0; usingnamespacestd; typedefstructNode { intdata; structNode*next; }node; voidJp(intn,intk,intm) { node*p; node*out; node*curr; p=(node*)malloc(sizeof(node)); p->data=1; p->next=p; curr=p; for(inti=2;i<=n;i++) { node*t=(node*)malloc(sizeof(node)); t->data=i; t->next=curr->next; curr->next=t; curr=t; } out=curr->next; for(intj=1;j { out=p; p=p->next; } while(n--) { for(ints=0;s { out=p; p=p->next; } out->next=p->next; printf("%d->",p->data); free(p); p=out->next; } } intmain() { intm=0; intn=0; intk=0; cout<<"请输入参加报数的总人数: "< cin>>n; cout<<"输入开始报数的人的序号: "< cin>>k; cout<<"输入每次报数出队间隔的次数: "< cin>>m; Jp(n,k,m); return0; } 测试用例: 三、实现一元稀疏多项式简单的计算器(加、减、乘运算等) 源程序: #include #include #include typedefstructPolynomial{ floatcoef; intexpn; structPolynomial*next; }*Polyn,Polynomial; voidInsert(Polynp,Polynh){ if(p->coef==0)free(p); else { Polynq1,q2; q1=h; q2=h->next; while(q2&&p->expn { q1=q2; q2=q2->next; } if(q2&&p->expn==q2->expn) { q2->coef+=p->coef; free(p); if(! q2->coef) { q1->next=q2->next; free(q2); } } else { p->next=q2; q1->next=p; } } } PolynCreatePolyn(Polynhead,intm){ inti; Polynp; p=head=(Polyn)malloc(sizeof(structPolynomial)); head->next=NULL; for(i=0;i { p=(Polyn)malloc(sizeof(structPolynomial)); printf("请输入第%d项的系数与指数: ",i+1); scanf("%f%d",&p->coef,&p->expn); Insert(p,head); } returnhead; } voidDestroyPolyn(Polynp){ Polynq1,q2; q1=p->next; q2=q1->next; while(q1->next) { free(q1); q1=q2; q2=q2->next; } } voidPrintPolyn(PolynP){ Polynq=P->next; intflag=1; if(! q) { putchar('0'); printf("\n"); return; } while(q) { if(q->coef>0&&flag! =1)putchar('+'); if(q->coef! =1&&q->coef! =-1) { printf("%g",q->coef); if(q->expn==1)putchar('X'); elseif(q->expn)printf("X^%d",q->expn); } else { if(q->coef==1) { if(! q->expn)putchar('1'); elseif(q->expn==1)putchar('X'); elseprintf("X^%d",q->expn); } if(q->coef==-1) { if(! q->expn)printf("-1"); elseif(q->expn==1)printf("-X"); elseprintf("-X^%d",q->expn); } } q=q->next; flag++; } printf("\n"); } intcompare(Polyna,Polynb){ if(a&&b) { if(! b||a->expn>b->expn)return1; elseif(! a||a->expn elsereturn0; } elseif(! a&&b)return-1; elsereturn1; } PolynAddPolyn(Polynpa,Polynpb){ Polynqa=pa->next; Polynqb=pb->next; Polynheadc,hc,qc; hc=(Polyn)malloc(sizeof(structPolynomial)); hc->next=NULL; headc=hc; while(qa||qb) { qc=(Polyn)malloc(sizeof(structPolynomial)); switch(compare(qa,qb)){ case1: { qc->coef=qa->coef; qc->expn=qa->expn; qa=qa->next; break; } case0: { qc->coef=qa->coef+qb->coef; qc->expn=qa->expn; qa=qa->next; qb=qb->next; break; } case-1: { qc->coef=qb->coef; qc->expn=qb->expn; qb=qb->next; break; } } if(qc->coef! =0) { qc->next=hc->next; hc->next=qc; hc=qc; } elsefree(qc); } returnheadc; } PolynSubtractPolyn(Polynpa,Polynpb){ Polynh=pb; Polynp=pb->next; Polynpd; while(p) { p->coef*=-1; p=p->next; } pd=AddPolyn(pa,h); for(p=h->next;p;p=p->next) p->coef*=-1; returnpd; } intValuePolyn(Polynhead,intx){ Polynp; inti; intsum=0,t; for(p=head->next;p;p=p->next) { t=1; for(i=p->expn;i! =0;) { if(i<0){t/=x;i++;} else{t*=x;i--;} } sum+=p->coef*t; } returnsum; } PolynMultiplyPolyn(Polynpa,Polynpb){ Polynhf,pf; Polynqa=pa->next; Polynqb=pb->next; hf=(Polyn)malloc(sizeof(structPolynomial)); hf->next=NULL; for(;qa;qa=qa->next) { for(qb=pb->next;qb;qb=qb->next) { pf=(Polyn)malloc(sizeof(structPolynomial)); pf->coef=qa->coef*qb->coef; pf->expn=qa->expn+qb->expn; Insert(pf,hf); } } returnhf; } intmain() { intm,n,a,x,j=1; charflag; Polynpa=0,pb=0,pc; printf("欢迎使用多项式操作程序\n\n"); printf("请输入a的项数: "); scanf("%d",&m); pa=CreatePolyn(pa,m); printf("请输入b的项数: "); scanf("%d",&n); pb=CreatePolyn(pb,n); //输出菜单 printf("\n多项式a="); PrintPolyn(pa); printf("\n多项式b="); PrintPolyn(pb); printf("*请选择操作: *\n"); printf("*A: 代入x的值计算aB: 代入x的值计算b*\n"); printf("**\n"); printf("*C: 输出a+bD: 输出a-b*\n"); printf("**\n"); printf("*E: 输出a*b*\n"); printf("**\n"); printf("\n请选择操作: "); scanf("%c",&flag); switch(flag) { case'A': case'a': { printf("输入x的值: x="); scanf("%d",&x); printf("\nx=%d时,a=%d\n",x,ValuePolyn(pa,x)); break; } case'B': case'b': { printf("输入x的值: x="); scanf("%d",&x); printf("\nx=%d时,b=%d\n",x,ValuePolyn(pb,x)); break; } case'C': case'c': { pc=AddPolyn(pa,pb); printf("\na+b="); PrintPolyn(pc); break; } case'D': case'd': { pc=SubtractPolyn(pa,pb); printf("\na-b="); PrintPolyn(pc); break; } case'E': case'e': { pc=MultiplyPolyn(pa,pb); printf("\na*b="); PrintPolyn(pc); break; } default: printf("\n您的选择错误,请重新选择! \n"); } return0; }测试用例: 心得体会: 通过这次实验,我学会了顺序表链表的创建及增删改查等诸多应用操作,并起到了举一反三的作用,这次实验我学到了很多在课堂上学不到的知识,在调试程序方面我也提升很多。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验