数据结构实训.docx

上传人:牧羊曲112 文档编号:5306627 上传时间:2023-06-24 格式:DOCX 页数:27 大小:205.67KB
返回 下载 相关 举报
数据结构实训.docx_第1页
第1页 / 共27页
数据结构实训.docx_第2页
第2页 / 共27页
数据结构实训.docx_第3页
第3页 / 共27页
数据结构实训.docx_第4页
第4页 / 共27页
数据结构实训.docx_第5页
第5页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《数据结构实训.docx》由会员分享,可在线阅读,更多相关《数据结构实训.docx(27页珍藏版)》请在三一办公上搜索。

1、数据结构实训 课程课程设计说明书设计题目:队列的基本操作专 业:班级学号:姓 名:指导教师:2019 年 12 月 2 日教务处印制课 程设计任务书课题名称:队列的基本操作设计内容:1.编写链接队列的基本操作函数2. 使用链接队列的函数实现操作3招聘模拟技术条件或要求:C+ 6.0指导教师(签名): 教研室主任(签名): 开题日期:2019年12月2日完成日期:2019年12月5日目录一、目的及要求4二、需求分析41、实现要求42、设计思路4三、实验内容41、编写链接队列的基本操作函数。42、调用上述函数实现下列操作,操作步骤如下: 43、流程图53.1队列流程图53.2招聘模拟流程图64、程

2、序代码94.1程序运行结果115、招聘模拟程序 125.1程序运行结果17四、总结18目的及要求1、掌握链接存储队列的进队和出队等基本操作;2、掌握环形队列的进队和出队等基本操作;3、加深对队列结构的理解,逐步培养解决实际问题的编程能力。二、需求分析1、实现要求要求程序输出每个工种的录用者信息(编号、成绩),以及落选 者的信息(编号、成绩)。2、设计思路程序中按应聘者成绩从高到低的顺序进行排队录取。如果在第一 志愿队列中落选,便将他的成绩扣去5分后重新排队,并按其第二 志愿考虑录取。程序为每个工种保留一个录取者的有序队列。录取处 理循环直至招聘额满或已对全部应聘者都做了录用处理。三、实验内容1

3、、编写链接队列的基本操作函数。2、调用上述函数实现下列操作,操作步骤如下:(1)、调用进队函数建立一个队列;(2) 、读取队列的第一个元素;(3) 、从队列中删除元素;(4) 、输出队列中所有元素。3、流程图3.1队列流程图输入皿记素?talil-llnk=p%i|=P;Thco-d-*tai|-p;hsad-dala; had=h&ad-lnic;3.2招聘模拟流程图void OutPutStu(STU *p) 输出应聘人员有序队列中编号和成绩开始fur(;p !-NULL; p-p-next) printf(%d(%d)t,Trp-no,p-totall );ENDvoid FreeStu

4、(STU*p)/释放应聘人员空间开始STU q;whil 吟 p!二 NULL)q=*P;*p=(*p)- next,:free(q);ENDint InitJob(JOB *h,int n,int *all)随机生成工种信息iint i; JQE*ll-);pnntfCI种信息!抑与什成J治聘人数)MT:申洁内存亍吾哆/闻双内宥宣鞭 W);rei:Lrn-1;pi.lmt randonn(10)+1;pi.count=0tpLij .stu=NULL:*all + =pi.lmt;输出i和工珅材聘愿S翰出总廊A数return 0:LNDint InitStu(STU *h,int n, in

5、t m)/随机生成应聘人员信息STU*p; inti;回毗朔桢Sft宛布毓L翻2n);fcr(i=ftino=i;p-total=p-sortm=闭ndom(2fl1);p-z0=random(m);匝聘人-志原p-zni=random(m);匝聘人舞口原p-zi=0;输出贱携L巍2)胴 nsM(hp);printfCViJ; return 0;END00IsZD4、程序代码#include stdafx.h#include #include #include/#include typedef struct queue(int data;struct queue*link;QUEUE;void

6、 EnQueue(QUEUE*head,QUEUE*tail,int x) /* 进队操作*/(QUEUE *p;p=(QUEUE*)malloc(sizeof(QUEUE);p-data=x;p-link=NULL;/* 队尾指向空 */if(*head=NULL) /*队首为空,即为空队列*/*head=*tail=p;else(*tail)-link=p; /*新单元进队列尾*/*tail=p;/*队尾指向新入队单元*/int DeQueue(QUEUE*head,QUEUE *tail, int*cp) /* 出队操作 1:队空*/(QUEUE*p;p=*head;if(*head =

7、 NULL) /* 队空 */if*cp = (*head)-data;*head =(*head)-link;if(*head=NULL)/*队首为空,队尾也为空*/*tail=NULL;/* 释放单元*/free(p);return 0;/*输出队列中元素*/void OutputQueue(QUEUE*head)(while (head != NULL)( printf(%d,head-data);head=head-link;printf(n);void main()(QUEUE *head, *tail;int op, i;head=tail=NULL;/*将队列头和尾置为空*/wh

8、ile(1)(printf(请选择操作,1:进队2:出队0:退出,fflush(stdin); /*清空标准输入缓冲区*/scanf( %d, &op );switch(op)(case 0: /* 退出 */return;case 1: /* 进队 */printf(请输入进队元素:); scanf(%d, &i);EnQueue(&head, &tail, i );printf(队内元素为:n);OutputQueue(head);break;case 2: /* 出队 */if(DeQueue(&head, &tail, &i)=0)( /* 出队成功 */ printf(出队元素为:%

9、d,队内元素为:n” ,i); OutputQueue(head);elseprintf(队空 n);break;4.1程序运行结果5、招聘模拟程序#include#include#include#define DEMARK 5 /*按第二批录用的扣分成绩*/typedef struct stu(/*定义招聘人员信息结构*/int no,total,z2,sortm,zi; /*编号,总成绩,志愿,排除成绩,录取志愿号*/struct stu *next;)STU;/*结构变量名*/typedef struct jop( /*定义录用计划信息结构*/int lmt,count;/*计划录用人数

10、,已录用人数*/STU *stu;/*录用者有序队列*/)JOB;STU *head=NULL,*over=NULL;/初 始化头指针和尾指针int all;int random(int。)/定义 random 函数int rn=0;rn=rand()%n;return rn;void OutPutStu(STU *p) /输出应聘人员有序队列中的编号和成绩for(;p!=NULL;p=p-next)/判断 p 指针是否为空printf(%d(%d)t,p-no,p-total);/输出成员的编号和成绩 void FreeStu(STU *p)/释放应聘人员空间STU *q;while(*p!

11、=NULL)q=*p;*p=(*p)-next;free(q);void Insert(STU *p,STU *u)(/*按排除成绩从大到小顺序插队*/STU *v,*q;/插队元素的前后元素指针fOr(q=*p;q!=NULL;v=q,q=q-next)if(q-sortmsortm)/队中工人的成绩 next=u;u-next=q;/新元素的后继元素指针int InitJob(JOB *h,int n,int *all)(/* 随机生成工种信息 */int i;JOB *p;*all=0;printf(工种信息工种号(计划招聘人数)n);if(p=(JOB*)malloc(n*sizeof

12、(JOB)=NULL)(printf(内存申请错误!n);return -1;for(i=0;in;i+)pi.lmt=random(10)+1; /假设工种招聘人数为 110/pi.count=0;pi.stu=NULL;*all+=pi.lmt;printf(%d(%d)t,i,pi.lmt);printf(n 总招聘人数%dn,*all);*h=p;return 0;int InitStu(STU *h,int n,int m)(/* 随机生成应聘人员信息 */STU *p;int i;printf(应聘人员信息编号,成绩,志愿1,志愿2n);for(i=0;ino=i;p-total=

13、p-sortm=random(201);p-z0=random(m);/*应聘人员第一志愿 0m-1*/p-z1=random(m);/*应聘人员第一志愿 0m-1*/p-zi=0;/录取志愿初始化为0,即第一志愿printf(%d,%3d,%d%dt,i,p-total,p-z0,p-z1);Insert(h,p);printfCn);return 0;void main()int m;工种总数,编号为0m-1int n;/应聘人员总数JOB *rz;int all; /计划招聘人员总数STU *head=NULL,*over=NULL;/应聘人员队列,落聘人员队列STU *p;int i;

14、while (1)(m=n=0;printf(请输入工种总数(120),=0:退出,scanf(%d,&m);im=0)/退 出return;if(m20|m0)continue;if(InitJob(&rz,m,&all)!=0)/生 成工种信息return;printf(n请输入应聘人员总数(5400),=0 :退出, scanf(%d,&n);if(n=0)/退 出return;if(n400)(free(rz);/释放应聘人员信息continue;if(InitStu(&head,n,m)!=0)/生 成应聘人员信息return;printf(n应聘人员队列n);OutPutStu(h

15、ead);while(all0&head!=NULL)(/当人员没有招满且队列不为空p=head;取应聘人员队首指针head=head-next;/队首指针下移i=p-zp-zi;/取该应聘人员的应聘工种号if(rzi.countzi=1)p-next=over;/该工人入落聘者队列over=p;continue;p-sortm-=DEMARK ;/该工种已招满,工人分数降档p-zi=1;/该工人改为第二志愿Insert(&head,p);/重 新入队for(i=0;im;i+)printf(n 工种%d招聘情况n”,i);OutPutStu(rzi.stu);printf(n);printf

16、(n 落聘人员n);OutPutStu(head);OutPutStu(over);printf(n);for(i=0;im;i+)/*释放人员工种招聘人员空间*/FreeStu(&rzi.stu);FreeStu(&head);/*释放落聘人员空间*/FreeStu(&over);/*释放落聘人员空间*/free(rz);/释放工种信息空间5.1程序运行结果L:UsersGJ VDesktc.ptVLXsyfaXDebijgX&yG.exe肩榆人匚伸总姓门也,=也山1匚种信息顷号(计划招膊人裁)0(2)总招聘人教传请输M聘人员总数S4的F:退加应聘人员信息;犒号,陶绩,志蹴志强卧0,17&仙

17、1. 74s DO 2. 12, 00 乱 77,004, 144, 00它肥人员队列0(176) 4(144) S (77)1(742(12)匚肿0招聃情况0(176 4(144)落聘人峋3(77)1(74)2:12)请输AT种总数CT20L=0:退出.四、总结 这次课程设计的心得体会通过实习我的收获如下:1、巩固和加深了对数据结构的理解,提高综合运用本课程所学 知识的能力。2、培养了我选用参考书,查阅手册及文献资料的能力。培养独 立思考,深入研究,分析问题、解决问题的能力。3、通过实际编译系统的分析设计,编程调试,掌握应用软件的 分析方法和工程设计方法。4、通过课程设计,培养了我严肃认真的

18、工作作风,逐步建立正 确的生产观念、经济观念和会局观念。从刚开始得觉得很准,列最后 把这个做出来,付出了很多,也得到了很多,以前总以为自己对编程 的地方还不行,现在,才发现只要认真做,没有什么不可能。编程时要认真仔细,出现错误要及时找出并改正,遇到问题要去 查相关的资料。反复的调试程序,最好是多找几个同学来对你的程序 进行调试并听其对你的程序的建议,在他们不知道程序怎么写的时候 完全以一个用户的身份来用对你的用户界面做一些建议,把各个注意 的问题要想到:同时要形成自己的编写程序与调试程序的风格,从每 个细节出发,不放过每个知识点,注意与理论的联系和理论与实践的 差别。另外,要注意符号的使用,注意对字符处理,特别是对指针的 使用很容易出错且调试过程是不会报错的,那么我们要始终注意指针 的初始化不管它怎么用以免不必要麻烦。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号