【精品】数据机构中关于线性表的编程习题.doc_第1页
【精品】数据机构中关于线性表的编程习题.doc_第2页
【精品】数据机构中关于线性表的编程习题.doc_第3页
【精品】数据机构中关于线性表的编程习题.doc_第4页
【精品】数据机构中关于线性表的编程习题.doc_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、标题:约瑟夫环时限:500 ms内存限制:2000 K总时限:3000 ms约瑟夫环编号为1, 2, 3,,n的n个人按顺时针方向围坐一圈。任选一个正整数 描述:作为 报数上限m,从第个人开始按顺时针方向自1开始顺序报数,报到血时停止报数。报m的人 出列,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为 止。设计程序输出出列顺序。人数n报数上限m人员记录1 (格式为:姓名学号性别年龄班级健康状况) 输入:人员记录2人员记录n第1次报数岀列的人员记录S山第2次报数出列的人员记录 输出: 第n次报数出列的人员记录53安弥邵IOOOOOOl女28计43 一般 宰觅IOOO

2、oO°2男23计79健康,顾健IOOOOO03男27计29 一般宓顽芳IOooOO04女20计17健康能纸垄IOOOOO05男18计1健康顾健IOOOOO03男27计29 般安弥邵IOOOOOOl女28计43 一般 输出样例:能纸垄IOOOOO05男18计11健康 宰觅IOOOOO02男23计79健康宓顽芳IOOOOO04女20计17健康彳BHr半来源:# include<stdio.h>#incl ude<std lib.h>#define EIemTyPe Int typedef StrUCt StUdentint num;Char name10;floa

3、t SCOre 1;float SCOre2;float SCOre3;float average;StrUCt StUdent *next; student,*stu;VOid CreatLiSt(StU L,EIemType n)StU P 1; while(n>0)P 1 =(StU)malloc(sizeof(student);SCanf(n%d”,&p 1 ->num);SCanf(%s,p 1 ->name); scanf(n%f,&p 1 ->score 1);SCanfC,%f,&P 1 ->score2);SCanfC,%

4、r,&P 1 ->score3);L> next=pl;L=l;n-;)L->next=NULL;VOid AVerageSCOre(StU L)StU p;p=L->next;While(P)p->average=(p->score 1 )+(p->score2)+(p->score3)3; P=P>next;)VOid LiSt_SOrt(StU L)StU p,qj,s,l;1=L;p=L->next;While(P)r=p; q=p->next; while(q)(if(r->average<q-&g

5、t;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;elseWhiIe(S->next->num !=r->num)s=s->next;s->next=r->next;l->next=r;l=r;)l->next=NULL;VOid TraVerSeLiSt(StU L,ElemType n) (ElemTyPe i=0;StU p;p=L->

6、next;WhiIe(P)i+;if(i=n && n> 10)Printf(n%d %s %.2f %.2f %.2f %.2f %dnH,p->num,p->name,p->score 1 ,p->score2,p->score3,p->aVeragej);elsePrintf(n%d %s %.2f %.2f %.2f %.2f %dnH,p->num,p->name,p->score 1 ,p->score2,p->score3,p->aVerage,i);p=p->next;int m

7、ain()ElemTyPe n;StU L;L=(StU)malloc(sizeof(student);L->next=NULL;scanf(%d,n);CreatLiSt(L,n);AverageScore(L);LiSt_SOrt(L);TraVeISeLiSt(L,n);return O;实验题目供10题,第2题)标题:多项式加减乘时限:5000 ms内存限制:8000 K总时限:3000 ms多项式加减乘有A, B9Cn个关于X的个多项式,求一个关于A, B,C的多项式描述:的结果多项式的每一项之间用空格隔开,每一项的系数,X,指数之间也用空格隔开, 系数为0的项不输出基于多项式

8、A, B, C的运算表达式关于X的多项式A输入:关于X的多项式B关于X的多项式C表达式的运算结果输出:含有A) B, C.表达式的运算结果,保留两位小数。 输出多项式表达式按指数降序排序(A+B)*(A B)输入样例:A 1 x2.I 3 X -3.09B 2x 1 2x0输出样例:1.00 X 4. 20 -4. 00 X 2. 00 -8. 00 X 1.00 -4. 00 X 0. 00 6. 00 X -0. 999. 00 X -6. 18提不:元多项式的表达及相加参见第39页,表达式求值参见第52页实验题目(共10题,第3题)标题:迷宫问题时限:1OOOOO ms内存限制:IOOO

9、OO K总时限:3000 ms迷宫问题迷描述:宫是-个二维矩阵,其中1为墙,0为路,3为入I 1,4为出11要求从入11开始,从岀 口结束,按照下佐,上,右的顺序来搜索路径迷宫宽度W迷宫高度h迷宫第一行输入:迷宫第二行迷宫第h行横坐标n-1纵坐标n-1入曰横坐标1 入口纵坐标1横坐标2纵坐标2横坐标3纵坐标3输出:横坐标4纵坐标4出口横坐标n出口纵坐标n8 10 IllIliIl IOIlO 10 1 IOIOOIOl 11031011输入样例:1 00 1004 1 1 0000 1 1 1 IOIOOIOl IOiOOO Illll 1000 1 IlllIlll输出祥例:23242535

10、3637474645445464提 示:使用栈参见教材50页include <stdio.h>#include <stdlib.h>#define NMAX 1024int mazefNMAXNMAX;typedef StrUCt POirt2D(int x;int y; PosType;typedef StrUCt SElemtyPeint ord;POSTyPe seat;int di; SelemType;typedef StrUCt SqStaCk(SelemTyPe* top;SelemTyPe* base; int stacksize; SqStaCk;VO

11、id CreatMaZe(int w,int h) int i,j;for(i=0; i< h; i+)for(j=0; j < w; j+) scanf(,%d ,&maze i j );VOid InitStaCk(SqStaCk &s)(s.base = (SelemTyPe*)malloc(NMAX *N MAX*sizeof(SelemType); if(!s.base)Printfc存储分配失败!,s.top = s.base;s.stacksize = NMAX*NMAX;VOid FOOtPrint(POSTyPe CUrPOS)(mazecurpo

12、s.xcurpos.y=1;bool PaSS(POSTyPe CUrPOS)(if(mazecurpos.x curpos.y = O)return true;elsereturn false;VOid PUShStaCk(SqStaCk &s,SelemType e)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+;VOid NeXtPOS(POSTyPe &curpOSjnt a)SWitCh(a)CaSe 1:C

13、UrPOS.x+; break;CaSe 2:CUrPOS.y-; break;CaSe 3:CUrPOS.x-; break;CaSe 4:CUrPOS.y+; break;bool StaCkEmPty(SqStaCk S)(if(s.base = s.top)return true;elsereturn false;)VOid POPStaCk (SqStaCk &S9SelemType &e)s.top;e.ord = s.top->ord;e.seat.x = s.top->seat.x;e.seat.y = s. top->seat.y;e.di

14、= s.top->di;VOid MarkPrint(PoSTyPe CUrPOS)(mazefcurpos.xlfcurpos.y = 1;bool MaZePath(POSType start,PosType end,sqstack &s)(POSTyPe CUrPOs;SelemTyPe e;int a = 1;int CUrSteP = 1; 探索第一步CUrPOS.x = start.x; 11设定“当前位置”为“入口位 置CUrPOS.y = start.y;doif(pass(curpos)FootPrint(Curpos); 留下足迹 e.ord = CUrSte

15、p;e.seat.x = CUrPOS.x;e.seat.y = CUrPOS.y;e.di = a;PUShStaCk(S,e); ff 加入路径if(e.seat.x = end.x)&&(e.seat.y = end.y) 到达终点 return true;NeXtPOS(CUrPOsj); ft下一位置是当前位置的南邻C UrSteP+; ff探索下一步 ifelse 当前位置不能通过 if(! StackEmpty(S)(POPStaCk(S,e);while(e.di = 4&&! StaCkEmPty(S)(MarkPrint(e.seat); f

16、f留下不能通过的标记,并退回一步POPStaCk(S,e);CUrSteP;)whileif(e.di<4)e.di+; ff 换下一个方向探索 PUShStaCk(S,e);CUrPOS = e.seat;NeXtPOS(CUrPOS,e.di);设定当前位置是该新方向上的相邻块ifif)elsewhile(! StackEmpty(S); return false;int main()it w,h,i,j;POSTyPe end,start;SeIemTyPe e;int b;SqStaCk s,l;Initstack(I);Initstack(s);SCanf(%d%d,'

17、,w,&h);CreatMaZe(W,h);for(i = O; i < h; i+)for(j = O; j < w; j+)(if(mazefijl = 3)(start, x = i; s tart, y = j;mazeij = O;if(mazeij = 4)end.x = i; end.y = j; mazeij = O;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;

18、i <= b; i+)POPStaCk(Le);Printf(H%d %dn1e.seat.y,e.seat.x);elsePrintf(Hthere is no PaSS availablen); return 0;实验题目(共io题,标题:时限:内存限制:总时限:第4题) 学生信息管理1000 ms20000 K3000 ms用链式存储结构实现对一个班级学生信息管理。设计程序求出每个人的平均成 绩并 按平均成绩由高到底排序后输出学生记录。人数n输人员记录1 (格式为:学号姓名 成绩1成绩2成绩3)入:人员记录2输 出:人员记录X 人员记录y人员记录Z输入样例:31孙俪莉76 78 8

19、92章子怡72 56 673刘德华56 84 90输岀样例:1 孙俪莉 76 78 89 81.00 13 刘德华 56 84 90 76.67 22 章子怡 72 56 67 65.00 3提 示:来源:include<stdio.h>include<stdlib.h>define EIemTyPe int typedef StrUCt StUdent int num;Char name IO;float SCOre 1;float SCOre2;float SCOre3;float average;StrUCt StUdent *next; student,*stu

20、;VOid CreatLiSt(StU L9ElemType n)(StU P 1;While(n>0)(P 1 =(StU)malloc(sizeof(student);SCanf(M%d*&p l->num);SCanf(H%s,p l->name); scanf(,%f,&p 1 ->score 1);SCanf(*,%f,&p l->score2);SCanf(o%f *,&p 1 ->score3);L->next=pl;L=l;sL->next=NULL;VOid AVerageSCOre(StU L)

21、(StU p;p=L->next;While(P)p->average=(p->score 1 )+(p->score2)+(p->score3)3; p=p->next;VOid LiSt_SOrt(StU L) StU p,q,r,s,l;1=L; p=L->next;While(P)r=p; q=p->next; while(q)if(r->average< q> average)r=q;q=q->next;S=p ;if(s->average=r->average && s->nu

22、m=r->num) (p=p->next;l->next=r;l=r;elseWhile(S->next->num !=r->num)s=s->next;s->next=r->next;l->next=r;l=r;)l->next=NULL;VOid TraVerSeLiSt(StU L5ElemType n)ElemTyPe i=0;StU p; p=L->next; While(P)i+;if(i=n && n>10)PriIltfc%d %s %.2f %.2f %.2f %.2f %dn, &

23、gt;num,p->nanie,p>scorel,p->score2,P >scow3,p>aVerage,i);elsePriIltfVd %s %.2f %.2f %.2f %.2f %dnH,p->num,p->name,p->score 1 ,p->score2,p->score3,p->aVerage,i);p=p->next;int main()ElemTyPe n;StU L;L=(StU)malloc(sizeof(student);L->next=NULL;SCanf(%d,n);CreatLiSt

24、(L,n);AverageScore(L);LiSt_SOrt(L);TraVerSeLiSt(L,n);return O;实验题目(共1 ()题第5题)标题:顺序表上的基本操作实现时限:IOOO ms内存限制:IOOOOK总时限:3000 ms:初始化、创建、插入、删除、查找、遍历、逆 描述请输入线性表La的长度:n al a2 a3 .an (数值有序,为降序) 请输入要插入到线性表La中的数字X和插入的位置i:X i输入:请输入要删除数字的位置:i请输入要查找的数字:X 请输入线性表长度:m bl b2.bm (数值有序,为升序)创建好的线性表La=al a2.an 插入一个数字后的线性

25、表al a2.an+l 删除一个数字后的线性表al a2.an 输岀:查找一个输入的数字后如果找到,输岀该数字的位置i,如果没有找到,输出” 没有找到x”的信息。逆置al a2.an后的线性表an an-l.al 合并两个线性表后的线性表谿 &刷 请输入线性表La的长度:5 输入样例:请输入线性表La中的元素:14111095请输入要插入到线性表La中的数字X和插入的位置i: 8 4线性表 La= 14 11 10895请输入要删除的数字的位置:4线性表 La= 14 11 1095请输入要查找的数字:10找到,10在第3个位置逆置后的线性表La=5 9 10 11 14请输入线性表L

26、b的长度:4请输入线性表Lb中的元素:1369合并La和Lb后的线性表为:1 3569 9 10 11 14输出样例:提示:来源:include <stdio.h>#include <stdlib.h>#define LISTJNIT_SIZE 500#define LISTINCREMENT 10#define OVERFLOW -2#define ERROR 0#define OK 1typedef int ElemType;typedef StrUCtElemTyPe *elem;int length;int listsize; SqList;int InitLi

27、St_Sq(SqLiSt &L)Lelem=(ElemType *)malloc(LISTJNIT_SIZE*SiZeOf(ElemTyPe);if(!L.elem) exit (OVERFLOW);Le ngth=O;LIiStSiZe 二 LIST INIT SIZE;return OK;VOid Creat_Sq(SqLiSt &L)L.elem=(ElemType *)malloc(LIST_INIT_SIZE*SiZeOf(ElemTyPe);if(!L.elem) exit (OVERFLOW);Length=O;LJistsize=LIST INIT SlZEin

28、t LiStInSert_Sq(SqLiSt &L, int i, ElemTyPe e)(int * newbasez*pz*q;if (i<llli>L.length+l)return ERROR;if(Lngth > = L.listsize)newbase = (ElemTyPe *)realloc(L.elem/(L.listsize+LISTINCREMENT)*sizeof(ElemType);if(Inewbase) exit(OVERFLOW);L.elem=newbase;L.listsize+二 LISTlNCREMENT;) q=&(L

29、.elemi-1);for(p=&(L.elemLlength-l); p>=q;P)* (p+l)=*p;*q=e;+ + Le ngth;return OK;)int LiStDelete_Sq(SqLiSt &L, int i)(int *pq;if(i<l)ll(i>L.length)return ERROR;P = & (L.elemi-1);q = L.elem + LJength-1;for(+ + p; p<=q; + + p)一Length;return OK;)VOid LOCate EI e m_Sq (Sq Li St &

30、amp;L,int x)(int ifflag=O;for(i = 1; i<L.length; i+)if (L.elemi =x)flag = 1;break;)if (flag=l)(Printf(M 找到,%d 在第 1 个位置n,x,i + 1);)elsePrintf(,没找到n”);)VOid OUtPUt(SqLiSt &L)inti;for(i=0; ivLength; i+)Printf(H%d M,L.elemi);VOid MergeLiSt_Sq(SqLiSt La, SqLiSt Lb, SqLiSt &Lc)(int *pa*pb*pc*pa

31、j ast*pbj ast;pa=La.elem;pb=Lb.elem;LcJistsize= LcJength = La.length + Lbl ength;pc=Lc.elem = (ElemTyPe *)malloc(LcJiStSiZe * SiZeOf(EIemType);if(!Lc.elem) exit(OVERFLOW);PaJaSt=La.elem +Laength-1;PbJaSt=Lb.elem + LbJength-1;WhiIe(pa< = PajaSt&&pb< = PbjaSt)if (*pav=*pb)*pc+ + =*pa+;el

32、se *pc+ +=*pb+;)While(pa< = PajaSt) *pc+ +=*pa + +;WhiIe(pb< = Pb-IaSt) *pc+ +=*pb+;VOid BaCkLiSt_Sq(SqLiSt &L)(int i,n,temp;n = Length/2;for(i = l;i< = n;i + +)(temp=L.elemi-l;L.elemi-1 = LelernLlength-i;LelernLlength-i=temp;)int main()(int nln2ixjOCatejnsertjOCate_deletejOCate;SqLiSt

33、La,Lb,Lc;Creat_Sq(La);Creat_Sq(Lb);Creat_Sq(LC);SCanf(V % d,nl);for(i=0;i<nl;i+)SCanf(%dn, La.elem+i);LaJength+; Printf ("创建好的线性表La=M);OUtPUt(La);Printf(ySCanf(M%d%dn,&x,&locate_insert);LiStInSert_Sq(LajOCateJnSert,x);Printf(,插入一个元素后的线性表La=M);OUtPUt(La);Printf("n");SCanf(%d

34、 , &locate_delete);LiStDeIete_Sq(LajOCate_delete);Prirtf(-删除一个元素后的线性表La=M);OUtPUt(La);PrilItf("n");SCanf(M%dH,&locate);LocateElem_Sq(LaJocate);BaCkLiSCSq(La);PrintfC逆置后的线性表La=M);OUtPUt(La);SCanf(H %d 7&n2);for(i=0;i<n2;i+)(SCanf(%d,Lb.elem+i);LbJength + +;)MergeLiSt_Sq(La,Lb

35、,Lc);Printf ("合并La和Lb后的线性表二”);OUtPUt(Lc);Printf(HnM);return 0;实验题目(共10题,第6题)标题:时链表上的基本操作实现限:内存限制:总时IOOOO K3000 ms描 述:在单链表存储结构上实现基木操作:初始化、创建、插入、删除、杳找、遍历、逆 置、合并运算。线性表长度nal a2a3 .an (数值有序,为降序)1000 ms输入:要插入到线性表中的数字X和插入的位置i要删除的数字的位置i要查找的数字X线性表长度mbl b2.bm (数值有序,为升序) 创建的线性表al a2.an插入一个数字后的线性表al a2.an+

36、l删除一个数字后的线性表al a2.an输出:查找一个输入的数字后如果找到,输出该数字的位置i,如果没有找到,输岀“没有找到 X”的信息。逆置al a2.an后的线性表an an-l.al合并两个线性表后的线性表 请输入线性表La的长度:6请输入线性表La中的元素:15 13 109 8 5请输入要插入到线性表La中的数字X和要插入的位置:7 6线性表La=I5 13 10987 5 (输出)请输入要删除的数字的位置:4g、由网 线性表La=15 13 10 87 5 (输出)刷入样例:请输入要查找的数字:10找到,10在第3个位置逆置线性表La=5 7 8 10 13 15请输入线性表Lb的

37、长度:4请输入线性表Lb中的元素:13 69合并La和Lb后的线性表为:1 3 5 67 8 9 10 13 15输出样例:提示:来源:提交代码include <stdio.h>include <stdlib.h> typedef StrUCt LnOde(int data;StrUCt LnOde *next; InOde,*linklist;VOid InitLiSt_I(IinkliSt *1)*1 = (IinkliSt)malloc(sizeof(lnode); (*l)->next = NULL;VOid CreatLiSt_I(IinkliSt l.

38、int n)int i= O;IinkliSt rear,p;rear = 1;for(; i<n; i+)P = (IinkliSt)malloc(sizeof(lnode); scanf(n%d,p->data); rear->next = p;p->next = NULL;rear = p;VOid LiStTraVerSe(IinkliSt 1)IinkliSt p;P = l->next;While(P)Printf(%d ,p->data);P = p->next;Printf(,nn);VOid LiStlnSert_I(IinkliSt

39、 IJnt j, int e)int i;IinkliSt p,q;/p = (IinkliSt)malloc(sizeof(lnode); q = (IinkliSt)malloc(sizeof(lnode); P = l->next;for(i=l; i < j-1; i+)P = p->next; q->data = e;q->next = p->next;p->next = q;VOid LiStDeIete-J(IinkliStI,intj)int i=l;IinkliSt p;P = l->next;for(; i < j-1;

40、i+)P = p->next;p->next = p->next->next;int LiStLOCate_I(IinkliSt hint e)(int i=0;IinkliSt p;P = l->next;While(P)i+;if(p->data = e)(Printf (,找到,d 在第d 个位置n,e,i); return O;P = p->next;Printf (V 没找到n");return O;VOid LiStlnVerSiOn(IinkliSt 1)(IinkliSt p,q;P = l->next;q = l-&g

41、t;next;if (!pll!(p->next)return;elsep=p->next; q->next = NULL; While(P)(q=p->next;p->next = l->next; l->next = p;p=q; if(q) q=q->next;VOid LiStMerge(IinkIiSt IJinklist IbJinkliSt IC) (IinkliSt p,q,s;P = l->next;q = lb->next;S = lc;While(P&&q)(if(p->data >

42、q->data)s->next = q;q = q->next;S = s->next;else(s->next = p;P = p->next;S = s->next;if(q = NULL)s->next = p;if(p = NULL)s->next = q;int main()int e9nj,x;IinkliSt la,lb,lc;SCanfc5%d,n);,请输入线性表La的长度InitLiStJ(&la);CreatLiSt_l(la,n);Printf(咆建好的线性表La=H);LiStTraVerSe(la);SC

43、anf(H%d%dH,&e,&j); 请输入要插入到线性表La中的数字X和要插入的位置LiStInSertj(Iaj,e);Printf(H插入一个元素后的线性表La=n);LiStTraVerSe(la);SCanfc, %d,j);,输入要删除的数字的位置LiStDeIete_1( IaJ);Printf (,删除一个元素后的线性表La=°);LiStTraVerSe(la);SCanfc5%d,x); 请输入要查找的数字LiStLOCate(la,x);LiStInVerSiOn _l(la);Printf ("逆置后的线性表La=”);LiStTra

44、VerSe(la);SCanfC5%d,n); 请输入线性表Lb的长度InitLiSt_l(&lb);CreatLiStJ(Ib,n); ff请输入线性表Lb中的元素Printfc合并La和Lb后的线性表二);InitLiSt_1(&lc);ListMergeJ(IaJbJc);LiStTraVerSe(Ic);return 0;实验题目供1()题,第7题)标题:括号匹配问题时限:IOOOmS内存限制:IOoooK总时限:3000 ms理用顺序存储实现栈的初始化、入栈、出栈、取栈顶、判栈空操作。调用以上操作实现判断从 键盘输入的括号序列是否匹配。输入:括号序列# (#为括号输入

45、结束符号)输出:匹配或不匹配输入样例:()#输出样例:提示:()#匹配不匹配来源:# include<stdio.h># include<stdlib.h>#define STACKINCRESE 100#define STACKJN 10typedef StrUCt(Char *base;Char *top;int stacksize; SqStack;VOid InitStaCk(SqStaCk &s)s.base=(char)ma!loc(STACK_IN * SiZeOf(Char);if(!s.base) exit(l);s.top=s.base;s.

46、Stacksize=STACKJN;Char GettOP(SqStaCk &s,Char e)(e=*(s.top-l);return e;VOid PUSh(SqStaCk &s,char e)if(s.top-s.base)>s.stacksize)s.base=(char *)realloc(s.base,(s.stacksize+STACKINCRESE)*sizeof(char); if(!s.base) exit(l);s.top=s.base+s.stacksize;s.stacksize=s.stacksize+STACKINCRESE; * s.top

47、+=e;VOid POP(SqStaCk &s,Char e)if(s.base=s.top) exit(l); e=*s.top;int main(void)SqStaCk s;Initstack(s);Char a,e;SCanfe % c",&a);PUSh(S,a);SCanf(H%cn,&a);While(a!=#)SWitCh(a)(case*1:(if(Gettop(s,e)!=,)(PUSh(S9a);else Pop(s,e);break;case*)1:if(Gettop(s,e) !=*(')(PUSh(S,a);else Pop

48、(s,e); break;case,:(if(Gettop(s5e)!-c)PUSh(S9a);else Pop(s9e);break;case':case, *:case'o :PiiSh(S,a); break;SCanfC%c:&a);)if(s.base=s.top) Printf(n 匹配); else PrintfC* 不匹配,return 0;实验题目(共10题,第8题)标题:患者到医院看病事件模拟时限:IOOOmS内存限制:IooooK总时限:3000 ms患者到医院看病的顺序是:先排队等候,再看病治疗。要求设计一个算法,模拟病人等候就诊的过程。其中:“

49、病人到达”用命令(或“a”)表示,“护士让下一位就诊”用(或“屮)表示,“不再接收病人排队”用“S”(或“s”)表示。A (或a)病历号输入:N (或n)S (或 S)请输入命令:病历号为X的病人就诊无病人就诊下列排队的病人依次就诊:今天不再接收病人排队输入命令不合法!请输入命令:A输入样例:病历号:123请输入命令:n病历号为123的病人就诊请输入命令:n无病人就诊请输入命令:a病历号:124请输入命令:a病历号:125请输入命令:X输入命令不合法!请输入命令:S下列排队的病人依次就诊:124125今天不再接收病人排队输出样例:来源:提不:#include<stdio.h># i

50、nclude<stdlib.h>typedef StrUCt QnOde(int date;StrUCt QnOde *next; Qnode5*Queueptr;typedef StrUCt(QUeUePtr rear;QUeUePtr front; Linkqueue;VOid InitqUeUe(LinkqUeUe &Q)(Q.front=Q.rear=(Queueptr)malloc(sizeof(Qnode); if(!Q.front) exit(O);Q.front->next=NULL;VOid enqueue(Linkqueue &Q,int

51、e)(QUeUePtr p;P=(QUeUePtr)malloc(sizeof(Qnode);if(!p) exit(O);p->date=e;p->next=NULL;Q.rear->next=p;Q.rear=p;int dequeue(Linkqueue &Q,int e)QUeUePtr p;p=Q.front->next;e=p date;Q.front->next=p->next;if(Q.rear=p) Q.rear=Q.front;free(p);return e;int empety(Linkqueue &Q)return

52、Q.front=Q.rear;int main()LinkqUeUe Q;Char q;Initqueue(Q);int flag=l;inti;while(flag)(SCanf(H%cn,&q);if(q=, a'llq='A')(SCanfc % d",&i);enqueue(Q,i);)else if(q=tN,llq=,nt)(if(!empety(Q)(Printf (,、離历号为d 的病人就诊n,dequeue(Q,i); elsePrintf(,无病人就诊);else if(q=,s,llq=,S,)Printf (”今天不再接

53、收病人排队,”);flag=O;Printf (,下歹U排队的病人依次就诊:,while(!empety(Q)Printf(M%d ,dequeue(Q J);)elsePrintfC,输入命令不合法! n,;getchar();return 0;实验题目(共10题,第9题)标题:迷宫的最短路径时限:1000 ms内存限制:IooooK总时限:3000 ms描述:设计一个算法找一条从迷宫入曰到岀口的最短路径。:最短路n迷宫的布局来源:#include <stdio h>魄&象為行和列:68(W)(3,4) 號臾毬宫的布局:OllIOlll(3,3)(2,2) (1,1)#include <stdlib.h>#define QUEUEJNIT_SlZE 100#define QUEUEINCREMENT 10 typedef StrUCt POint(int x;it y; Point;typedef StrUCt QElemTyPeint pre;POint pos; QElemType;StrUCt SqQUeUe(QElemTyPe *base;int front;int rear;int size;VOid InitQUeUe(SqQUeue&lq)(lq.base=(QElemType

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论