精品数据机构中关于线性表的编程习题doc.docx
- 文档编号:5367758
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:46
- 大小:52.29KB
精品数据机构中关于线性表的编程习题doc.docx
《精品数据机构中关于线性表的编程习题doc.docx》由会员分享,可在线阅读,更多相关《精品数据机构中关于线性表的编程习题doc.docx(46页珍藏版)》请在冰豆网上搜索。
精品数据机构中关于线性表的编程习题doc
标题:
约瑟夫环
时限:
500ms
内存限制:
2000K
总时限:
3000ms
约瑟夫环
编号为1,2,3,......,n的n个人按顺时针方向围坐一圈。
任选一个正整数描述:
作为报数上限m,从第…个人开始按顺时针方向自1开始顺序报数,报到血时停止报数。
报m的人出列,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。
设计程序输出出列顺序。
人数n报数上限m
人员记录1(格式为:
姓名学号性别年龄班级健康状况)
输入:
人员记录2
人员记录n第1次报数出列的人员记录
s山第2次报数出列的人员记录输出:
•••
第n次报数出列的人员记录
53
安弥邵10000001女28计43一般宰觅1°°0°0°2男23计79健康
顾健10000003男27计29一般
宓顽芳10000004女20计17健康
能纸垄10000005男18计]1健康
顾健10000003男27计29—般
安弥邵10000001女28计43一般输出样例:
能纸垄10000005男18计11健康
宰觅10000002男23计79健康
宓顽芳10000004女20计17健康
来源:
#include
#include
#defineElemTypeinttypedefstructStudent
intnum;
charname[10];
floatscore1;
floatscore2;
floatscore3;
floataverage;
structStudent*next;
}student,*stu;
voidCreatList(stuL,EIemTypen)
{
Stup1;
while(n>0)
(
p1=(stu)malloc(sizeof(student));
scanf(n%d",&p1->num);
scanf("%s”,p1->name);
scanf(n%f',&p1->score1);
scanf("%f',&p1->score2);
scanf("%r,&p1->score3);
L->next=pl;
L=pl;
n-;
)
L->next=NULL;
}
voidAverageScore(stuL)
{
Stup;
p=L->next;
while(p)
(
p->average=((p->score1)+(p->score2)+(p->score3))/3;p=p->next;
)
}
voidList_Sort(stuL)
{
Stup,q,r,s,l;
1=L;
p=L->next;
while(p)
r=p;q=p->next;
while(q)
(
if(r->average
r=q;
q=q->next;
}
S=p;
if(s->average==r->average&&s->num==r->num)
{
p=p->next;
l->next=r;
l=r;
}
else
{
while(s->next->num!
=r->num)
s=s->next;
s->next=r->next;
l->next=r;
l=r;
)
}
l->next=NULL;
)
voidTraverseList(stuL,ElemTypen)
(
ElemTypei=0;
stup;
p=L->next;
while(p)
{
i++;
if(i==n&&n>10)
printf(n%d%s%.2f%.2f%.2f%.2f%d\nH,p->num,p->name,p->score1,p->score2,p->score3,p->averagej);
else
printf(n%d%s%.2f%.2f%.2f%.2f%d\nH,p->num,p->name,p->score1,p->score2,p->score3,p->average,i);
p=p->next;
intmain()
(
ElemTypen;
stuL;
L=(stu)malloc(sizeof(student));
L->next=NULL;
scanf("%d",&n);
CreatList(L,n);
AverageScore(L);
List_Sort(L);
TraverseList(L,n);
return0;
实验题目供10题,第2题)
标题:
多项式加减乘
时限:
5000ms
内存限制:
8000K
总时限:
3000ms
多项式加减乘
有A,B,Cn个关于x的个多项式,求一个关于A,B,C的多项式
描述:
的结果
多项式的每一项之间用空格隔开,每一项的系数,x,指数之间也用空格隔开,
系数为0的项不输出
基于多项式A,B,C......的运算表达式
关于x的多项式A
输入:
关于x的多项式B
关于x的多项式C
表达式的运算结果
输出:
含有A,B,C……表达式的运算结果,保留两位小数。
输出多项式表达式按指数降序排序
(A+B)*(A・B)
输入样例:
A1x2.I3x-3.09
B2x12x0
输出样例:
1.00x4.20-4.00x2.00-8.00x1.00-4.00x0.006.00x-0.99
9.00x-6.18
提不:
••元多项式的表达及相加参见第39页,表达式求值参见第52页
来源:
实验题目(共10题,第3题)
描述:
输出:
迷宫是-个二维矩阵,其中1为墙,0为路,3为入I1,4为出II.要求从入II开始,从出
口结束,按照下佐,上,右的顺序来搜索路径.
迷宫宽度w迷宫高度h迷宫第一行
输入:
迷宫第二行
迷宫第h行
横坐标n-1纵坐标n-1
出口横坐标n出口纵坐标n
81011111111101101011010010111031011
输入样例:
100100411000011110100101101000111111000111111111
输出祥例:
33
23
24
25
35
36
37
47
46
45
44
54
64
提示:
使用栈
参见教材50页
#include
#include
#defineNMAX1024
intmazefNMAX][NMAX];
typedefstructpoint2D
(
intx;
inty;
}PosType;
typedefstructsElemtype
{
intord;
PosTypeseat;
intdi;
}SelemType;
typedefstructSqstack
(
SelemType*top;
SelemType*base;intstacksize;
}sqstack;
voidCreatMaze(intw,inth)
inti,j;
for(i=0;i ( for(j=0;j scanf(,,%d",&maze[i][j]); voidInitstack(sqstack&s) ( s.base=(SelemType*)malloc(NMAX*NMAX*sizeof(SelemType)); if(! s.base) printf(”存储分配失败! , s.top=s.base; s.stacksize=NMAX*NMAX; } voidFootPrint(PosTypecurpos) ( maze[curpos.x][curpos.y]=-1; } boolpass(PosTypecurpos) ( if(maze[curpos.x][curpos.y]==0) returntrue; else returnfalse; } voidPushstack(sqstack&s,SelemTypee) { s.top->ord=e.ord; s.top->seat.x=e.seat.x; s.top->seat.y=e.seat.y; s.top->di=e.di; s.top++; } voidNextPos(PosType&curpos,inta) switch(a) case1: curpos.x++;break; case2: curpos.y-; break; case3: curpos.x-; break; case4: curpos.y++;break; boolStackEmpty(sqstacks) ( if(s.base==s.top) returntrue; else returnfalse; ) voidPopstack(sqstack&s,SelemType&e) { s.top—; e.ord=s.top->ord; e.seat.x=s.top->seat.x; e.seat.y=s.top->seat.y; e.di=s.top->di; } voidMarkPrint(PosTypecurpos) ( mazefcurpos.xlfcurpos.y]=1; } boolMazePath(PosTypestart,PosTypeend,sqstack&s) ( PosTypecurpos; SelemTypee; inta=1; intcurstep=1;〃探索第一步curpos.x=start.x;〃设定“当前位置”为“入口位置”curpos.y=start.y; do { if(pass(curpos)) { FootPrint(curpos);〃留下足迹e.ord=curstep; e.seat.x=curpos.x; e.seat.y=curpos.y; e.di=a; Pushstack(s,e);〃加入路径 if((e.seat.x==end.x)&&(e.seat.y==end.y))〃到达终点returntrue; NextPos(curpos,l);〃下一位置是当前位置的南邻curstep++;〃探索下一步 }//if else〃当前位置不能通过 {if(! StackEmpty(s))( Popstack(s,e); while(e.di==4&&! StackEmpty(s))( MarkPrint(e.seat);〃留下不能通过的标记,并退回一步Popstack(s,e); curstep—; )//while if(e.di<4) { e.di++;〃换下一个方向探索Pushstack(s,e); curpos=e.seat; NextPos(curpos,e.di);〃设定当前位置是该新方向上的相邻块}//if }//if )//else } while(! StackEmpty(s)); returnfalse; intmain() intw,h,i,j; PosTypeend,start; SelemTypee; intb; sqstacks,l; Initstack(l); Initstack(s); scanf("%d%d",&w,&h); CreatMaze(w,h); for(i=0;i { for(j=0;j ( if(mazefi][jl==3) ( start.x=i; start.y=j; maze[i][j]=0; } if(maze[i][j]==4) { end.x=i; end.y=j; maze[i][j]=0; } if(MazePath(start,end,s)) ( s.top--; b=s・top->ord; s.top++; for(i=1;i<=b;i++) ( Popstack(s,e); Pushstack(Le); } for(i=1;i<=b;i++) Popstack(Le); printf(H%d%d\nr\e.seat.y,e.seat.x); else printf(Hthereisnopassavailable\nn); return0; } 实验题目(共io题,第4题) 标题: 时限: 内存限制: 总时限: 学生信息管理 1000ms 20000K 3000ms 描述: 用链式存储结构实现对一个班级学生信息管理。 设计程序求出每个人的平均成绩并按平均成绩由高到底排序后输出学生记录。 人数n 输入: 人员记录1(格式为: 学号姓名成绩1成绩2成绩3) 人员记录2 人员记录X1 输出: 人员记录y2 ♦•• 人员记录zn 输入样例: 3 1孙俪莉767889 2章子怡725667 3刘德华568490 1孙俪莉76788981.001 输出样例: 3刘德华56849076.672 2章子怡72566765.003 提示: 来源: #include #include #defineElemTypeint typedefstructStudent intnum; charname[IO]; floatscore1; floatscore2; floatscore3; floataverage; structStudent*next; }student,*stu; voidCreatList(stuL,ElemTypen) ( stup1; while(n>0) ( p1=(stu)malloc(sizeof(student)); scanf("%d",&pl->num); scanf("%s",pl->name); scanf(,'%f',&p1->score1); scanf(*'%f,,&pl->score2); scanf(°%f*,&p1->score3); L->next=pl; L=pl; n-; } L->next=NULL; } voidAverageScore(stuL) ( stup; p=L->next; while(p) { p->average=((p->score1)+(p->score2)+(p->score3))/3; p=p->next; } } voidList_Sort(stuL) { Stup,q,r,s,l; 1=L; p=L->next; while(p) r=p; q=p->next; while(q) ( if(r->average r=q; q=q->next; } S=p; if(s->average==r->average&&s->num==r->num) ( p=p->next; l->next=r; l=r; } else { while(s->next->num! =r->num) s=s->next; s->next=r->next; l->next=r; l=r; ) } l->next=NULL; } voidTraverseList(stuL,ElemTypen) ( ElemTypei=0; stup; p=L->next; while(p) ( i++; if(i==n&&n>10) printf(”%d%s%.2f%.2f%.2f%.2f%d\n”,p・>num,p->nanie,p->scorel,p->score2,p・>score3,p->average,i); else printf(”%d%s%.2f%.2f%.2f%.2f%d\nH,p->num,p->name,p->score1,p->score2,p->score3,p->average,i); p=p->next; } intmain() { ElemTypen; stuL; L=(stu)malloc(sizeof(student)); L->next=NULL; scanf("%d",&n); CreatList(L,n); AverageScore(L); List_Sort(L); TraverseList(L,n); return0; 实验题目(共1()题.第5题) 标题: 顺序表上的基本操作实现 时限: 1000ms 内存限制: 10000K 总时限: 3000ms 在顺序存储结构实现基本操作: 初始化、创建、插入、删除、查找、遍历、逆描述• 置、合并运算。 请输入线性表La的长度: n ala2a3...an(数值有序,为降序) 请输入要插入到线性表La中的数字x和插入的位置i: xi 输入: 请输入要删除数字的位置: i 请输入要查找的数字: x 请输入线性表长度: m blb2...bm(数值有序,为升序) 创建好的线性表La=ala2...an 插入一个数字后的线性表ala2...an+l 删除一个数字后的线性表ala2...an 输出: 查找一个输入的数字后如果找到,输出该数字的位置i,如果没有找到,输出” 没有找到x”的信息。 逆置ala2...an后的线性表anan-l...al 合并两个线性表后的线性表 谿>&刷请输入线性表La的长度: 5 输入样例: 请输入线性表La中的元素: 14111095 请输入要插入到线性表La中的数字x和插入的位置i: 84 线性表La=141110895 请输入要删除的数字的位置: 4 线性表La=14111095 请输入要查找的数字: 10 找到,10在第3个位置 逆置后的线性表La=59101114 请输入线性表Lb的长度: 4 请输入线性表Lb中的元素: 1369 合并La和Lb后的线性表为: 135699101114 输出样例: 提示: 来源: #include #include #defineLISTJNIT_SIZE500 #defineLISTINCREMENT10 #defineOVERFLOW-2 #defineERROR0 #defineOK1 typedefintElemType; typedefstruct { ElemType*elem; intlength; intlistsize; }SqList; intInitList_Sq(SqList&L) Lelem=(ElemType*)malloc(LISTJNIT_SIZE*sizeof(ElemType)); if(! L.elem)exit(OVERFLOW); L.length=0; Llistsize二LISTINITSIZE; returnOK; } voidCreat_Sq(SqList&L) { L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(! L.elem)exit(OVERFLOW); L.length=0; L.listsize=LISTINITSIZE; } intListInsert_Sq(SqList&L,inti,ElemTypee) ( int*newbasez*pz*q; if(i returnERROR; if(L.length>=L.listsize) newbase=(ElemType*)realloc(L.elem/ (L.listsize+LISTINCREMENT)*sizeof(ElemType)); if(Inewbase)exit(OVERFLOW); L.elem=newbase; L.listsize+二LISTINCREMENT; ) q=&(L.elem[i-l]); for(p=&(L.elem[Llength-l]);p>=q;—p) *(p+l)=*p; *q=e; ++L.length; returnOK; ) intListDelete_Sq(SqList&L,inti) ( int*p/q; if((i returnERROR; p=&(L.elem[i-1]); q=L.elem+L.length-1; for(++p;p<=q;++p) —L.length; returnOK; ) voidLocateEIem_Sq(SqList&L,intx) ( intifflag=0; for(i=l;i ( if(L.elem[i]==x) { flag=l; break; ) ) if(flag==l) ( printf(M找到,%d在第%€1个位置\n”,x,i+l); ) else {printf(”没找到\n”);} )voidoutput(SqList&L) inti; for(i=0;i printf("%dM,L.elem[i]); } voidMergeList_Sq(SqListLa,SqListLb,SqList&Lc) ( int*pa/*pb/*pc/*pajast/*pbjast; pa=La.elem; pb=Lb.elem; Lc.listsize=Lc.length=La.length+Lb.length; pc=Lc.elem=(ElemType*)malloc(Lc.listsize*sizeof(ElemType)); if(! Lc.elem)exit(OVERFLOW); paJast
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精品 数据 机构 关于 线性 编程 习题 doc