数据结构报告.docx
- 文档编号:24725096
- 上传时间:2023-05-31
- 格式:DOCX
- 页数:27
- 大小:33.79KB
数据结构报告.docx
《数据结构报告.docx》由会员分享,可在线阅读,更多相关《数据结构报告.docx(27页珍藏版)》请在冰豆网上搜索。
数据结构报告
数据结构
作业
学院名称电气工程学院
指导老师廖湘柏
班级电子信息工程071班
学号
学生姓名
2010年6月
一、问题描述:
设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出。
在停车场内,汽车按到达的先后次序,由北向南依次排列(假设大门在最南端)。
若车场内已停满n辆车,则后来的汽车需在门外的便道上等候,当有车开走时,便道上的第一辆车即可开入。
当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门后,其他车辆再按原次序返回车场。
每辆车离开停车场时,应按其停留时间的长短交费(在便道上停留的时间不收费)。
基本要求:
(1)要求以顺序栈模拟停车场,以链队列模拟便道。
(2)从终端读入汽车到达或离去的数据,每组数据包括三项:
1、是“到达”还是“离去”;
2、汽车牌照号码;
3、“到达”或“离去”的时刻。
与每组输入信息相应的输出信息为:
如果是到达的车辆,则输出其在停车场中或便道上的位置;如果是离去的车辆,则输出其在停车场中停留的时间和应交的费用。
设计思路:
1、根据题目要求,确定系统功能;
2、根据系统功能,确定实现方法和编程方式;
3、设计操作界面和功能选项;
4、对程序进行调试;
5、查看程序运行的结果并对程序加以修改;
程序如下;2#include"stdafx.h"
#include
#include
#include
#include
#include
usingnamespacestd;
stringtempNum;
structcar{
stringcarNumber;
intstartTime;
};
boolEqual(constcar&car1)
{
returncar1.carNumber==tempNum;
}
intmain(void)
{
cout<<"说明:
本程序假设前提条件为停车场初始情况为满,并且时间以整形表示..."< deque deque intcarNum; cout<<"请输入停车场现有的车辆数: "< cin>>carNum; intcarMax=carNum; cout<<"请输入这些车辆的信息: (车牌号到达时间)"< while(carNum--){ carcarInfo; cin>>carInfo.carNumber>>carInfo.startTime; carStop.push_back(carInfo); } stringstat; while(cout<<"请输入车辆到达离开情况: (到达/离开车牌号到达/离开时间)"< if(stat=="到达"){ carcarTemp; cin>>carTemp.carNumber>>carTemp.startTime; if(carStop.size()==carMax){ carWay.push_back(carTemp); cout<<"这辆车在便道的第"< } else{ carStop.push_back(carTemp); cout<<"这辆车在停车场的第"< } } else{ intleaveTime; cin>>tempNum>>leaveTime; if(find_if(carStop.begin(),carStop.end(),Equal)! =carStop.end()){ stack while(carStop.back().carNumber! =tempNum){ temp.push(carStop.back()); carStop.pop_back(); } cout<<"这辆车停在停车场的时间为"< carStop.pop_back(); while(! temp.empty()){ carStop.push_back(temp.top()); temp.pop(); } if(! carWay.empty()){ cartempCar=carWay.front(); tempCar.startTime=leaveTime; carStop.push_back(tempCar); carWay.pop_front(); } } else cout<<"在停车场中找不到此车,(可能已经离开或还在便道)请重新输入! "< } } return0; } 二、问题描述: 对单位的职工进行管理,包括插入、删除、查找、排序等功能。 要求: 职工对象包括姓名、性别、出生年月、学历、职务、住址、电话等信息。 (1)新增一名职工: 将新增职工对象按姓名以字典方式插入到职工管理文件中。 (2)删除一名职工: 从职工管理文件中删除一名职工对象。 (3)查询: 从职工管理文件中查询符合某些条件的职工。 (折半查找法) (4)排序: 按某种需要对职工对象文件进行排序。 (插入,冒泡,选择,选其中方法之一) 设计思路: 1、根据题目要求,确定系统功能; 2、根据系统功能,确定实现方法和编程方式; 3、设计操作界面和功能选项; 4、对程序进行调试 5、查看程序运行的结果并对程序加以修改; 程序如下;//aaa.cpp: 定义控制台应用程序的入口点。 // #include"stdafx.h" #include"stdio.h" #include"stdlib.h" #include"string.h" intshoudsave=0;/**/ structstudent { charnum[10];/*学号*/ charname[20]; charsex[4]; intage; intbirth; inttele; charaddr[30]; }; typedefstructnode { structstudentdata; structnode*next; }Node,*Link; /*************************************************************************************/ voidmenu() { printf("********************************************************************************"); printf("\t1登记职工资料\t\t\t\t\t2删除职工资料\n"); printf("\t3查询职工资料\t\t\t\t\t4修改职工资料\n"); printf("\t5保存职工资料\t\t\t\t\t6排序职工信息\n"); printf("\t0退出系统\n"); printf("********************************************************************************\n"); } /*************************************************************************************/ voidprintstart() { printf("-----------------------------------------------------------------------\n"); } voidWrong() { printf("\n=====>提示: 输入错误! \n"); } voidNofind() { printf("\n=====>提示: 没有找到该职工! \n"); } voidprintc()/*本函数用于输出中文*/ { printf("职工号\t姓名性别\t电话\t出生年月\t年龄\t地址\n"); } /*************************************************************************************/ voidprinte(Node*p)/*本函数用于输出英文*/ { printf("%-12s%s\t%s\t%d\t%d\t%d\t%s\n",p->data.num,p->data.name,p->data.sex,p->data.tele,p->data.birth,p->data.age,p->data.addr); } Node*Locate(Linkl,charfindmess[],charnameornum[])/*该函数用于定位连表中符合要求的接点,并返回该指针*/ { Node*r; if(strcmp(nameornum,"num")==0)/*按职工号查询*/ { r=l->next; while(r! =NULL) { if(strcmp(r->data.num,findmess)==0) returnr; r=r->next; } } elseif(strcmp(nameornum,"name")==0)/*按姓名查询*/ { r=l->next; while(r! =NULL) { if(strcmp(r->data.name,findmess)==0) returnr; r=r->next; } } return0; } /*************************************************************************************/ voidAdd(Linkl)/*增加职工*/ { Node*p,*r,*s; charnum[10]; r=l; s=l->next; while(r->next! =NULL) r=r->next;/*将指针置于最末尾*/ while (1) { printf("请你输入职工号(以'0'返回上一级菜单: )"); scanf("%s",num); if(strcmp(num,"0")==0) break; while(s) { if(strcmp(s->data.num,num)==0) { printf("=====>提示: 职工为'%s'的职工已经存在,若要修改请你选择'4修改'! \n",num); printstart(); printc(); printe(s); printstart(); printf("\n"); return; } s=s->next; } p=(Node*)malloc(sizeof(Node)); strcpy(p->data.num,num); printf("请你输入姓名: "); scanf("%s",p->data.name); getchar(); printf("请你输入性别: "); scanf("%s",p->data.sex); getchar(); printf("请你输入年龄: "); scanf("%d",&p->data.age); getchar(); printf("请你输入出生年月: "); scanf("%d",&p->data.birth); getchar(); printf("请你输入电话: "); scanf("%d",&p->data.tele); getchar(); printf("请输入地址: "); scanf("%s",&p->data.addr); getchar(); /*信息输入已经完成*/ p->next=NULL; r->next=p; r=p; shoudsave=1; } } /*************************************************************************************/ voidQur(Linkl)/*查询职工*/ { intsel; charfindmess[20]; Node*p; if(! l->next) { printf("\n=====>提示: 没有资料可以查询! \n"); return; } printf("\n=====>1按学号查找\n=====>2按姓名查找\n"); scanf("%d",&sel); if(sel==1)/*学号*/ { printf("请你输入要查找的职工号: "); scanf("%s",findmess); p=Locate(l,findmess,"num"); if(p) { printf("\t\t\t\t查找结果\n"); printstart(); printc(); printe(p); printstart(); } else Nofind(); } elseif(sel==2)/*姓名*/ { printf("请你输入要查找的姓名: "); scanf("%s",findmess); p=Locate(l,findmess,"name"); if(p) { printf("\t\t\t\t查找结果\n"); printstart(); printc(); printe(p); printstart(); } else Nofind(); } else Wrong(); } /*************************************************************************************/ voidmax(Nodek[],intx){ NodeNB; intsb; intmax=0; inti=0; intj=0; while(j i=j; max=0; while(i if(k[i].data.age>max){max=k[i].data.age;sb=i;} i++; } NB=k[j]; k[j]=k[sb]; k[sb]=NB; j++; } } /*************************************************************************************/ voidPaixu(Linkl)/*排序职工*/ { Linkc; intsel; charfindmess[20]; Node*p; Node*r; Nodek[1000]; inti=0; intx; if(! l->next) { printf("\n=====>提示: 没有资料可以排序! \n"); return; } printf("\t\t\t\t查找结果\n"); printstart(); printc(); r=l->next; while(r){ k[i]=*r; r=r->next; i++; } max(k,i); x=i; i=0; while(i printf("%-12s%s\t%s\t%d\t%d\t%d\t%s\n",k[i].data.num,k[i].data.name,k[i].data.sex,k[i].data.tele,k[i].data.birth,k[i].data.age,k[i].data.addr); i++; } } /*************************************************************************************/ voidDel(Linkl)/*删除*/ { intsel; Node*p,*r; charfindmess[20]; if(! l->next) { printf("\n=====>提示: 没有资料可以删除! \n"); return; } printf("\n=====>1按职工号删除\n=====>2按姓名删除\n"); scanf("%d",&sel); if(sel==1) { printf("请你输入要删除的职工号: "); scanf("%s",findmess); p=Locate(l,findmess,"num"); if(p) { r=l; while(r->next! =p) r=r->next; r->next=p->next; free(p); printf("\n=====>提示: 该职工已经成功删除! \n"); shoudsave=1; } else Nofind(); } elseif(sel==2) { printf("请你输入要删除的姓名: "); scanf("%s",findmess); p=Locate(l,findmess,"name"); if(p) { r=l; while(r->next! =p) r=r->next; r->next=p->next; free(p); printf("\n=====>提示: 该职工已经成功删除! \n"); shoudsave=1; } else Nofind(); } else Wrong(); } /*************************************************************************************/ voidModify(Linkl) { Node*p; charfindmess[20]; if(! l->next) { printf("\n=====>提示: 没有资料可以修改! \n"); return; } printf("请你输入要修改的职工学号: "); scanf("%s",findmess); p=Locate(l,findmess,"num"); if(p) { printf("请你输入新职工号: "); scanf("%s",p->data.num); printf("请你输入新姓名: "); scanf("%s",p->data.name); getchar(); printf("请你输入新性别: "); scanf("%s",p->data.sex); printf("请你输入新的年龄: "); scanf("%d",&p->data.age); getchar(); printf("请你输入新的出生年月: "); scanf("%d",&p->data.birth); getchar(); printf("请你输入新的电话: "); scanf("%d",&p->data.tele); printf("请输入新的地址: "); scanf("%s",&p->data.tele); printf("\n=====>提示: 资料修改成功! \n"); shoudsave=1; } else Nofind(); } /**************************************************************************************************/ voidDisp(Linkl) { intcount=0; Node*p; p=l->next; if(! p) { printf("\n=====>提示: 没有资料可以显示! \n"); return; } printf("\t\t\t\t显示结果\n"); printstart(); printc(); printf("\n"); while(p) { printe(p); p=p->next; } printstart(); printf("\n"); } /*************************************************************************************/ voidTongji(Linkl) { Node*pm,*pe,*pc;/*用于指向分数最高的接点*/ Node*r=l->next; if(! r) { printf("\n=====>提示: 没有资料可以统计! \n"); return; } pm=pe=pc=r; while(r! =NULL) { if(r->data.age>=pc->data.age) pc=r; if(r->data.birth>=pm->data.birth) pm=r; if(r->data.tele>=pe->data.tele) pe=r; r=r->next; } } /*******************************************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)