《数据结构大作业报告.pdf》由会员分享,可在线阅读,更多相关《数据结构大作业报告.pdf(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构大作业实验报告数据结构大作业实验报告课程名称:数据结构设计题目:客户去银行储蓄模拟程序一一 实验题目实验题目(1)内容描述:编写一个程序反映客户到银行储蓄的过程。(2)基本要求:要实现以下功能:1:排队 2:储蓄 3:查看排队 4.:删除自己所排的队 5.不再排队,剩下的客户依次储蓄 6:下班二二 实验的工程组成图和程序结构图实验的工程组成图和程序结构图mainbank本工程的组成结构如左图所示,程序结构图如右图所示。三三 工程所包含的函数的功能描述工程所包含的函数的功能描述BankBank()():模拟客户到银行去储蓄的过程。客户排队储蓄,所以要用到一个队列,这里设计了一个不带头结点
2、的单链表作为队列。四四 实验工程的算法描述及流程图实验工程的算法描述及流程图/客户排队去银行储蓄客户排队去银行储蓄,用到了队列的知识用到了队列的知识,这里设计了一个不带头结点的单链表这里设计了一个不带头结点的单链表作为队列来完成排队储蓄过程作为队列来完成排队储蓄过程#include#include#include#include typedef structtypedef struct qnode qnode intint data;data;structstruct qnode*next;qnode*next;QNode;QNode;/定义链队结点类型定义链队结点类型typedef stru
3、cttypedef struct QNode*front,*rear;QNode*front,*rear;QType;QType;/定义链队类型定义链队类型voidvoid bank()bank()/模拟客户储蓄的过程模拟客户储蓄的过程 intint cho,onwork=1,no,find;cho,onwork=1,no,find;QType*q;QType*q;/定义链队类型的指针定义链队类型的指针QNode*p,*r;QNode*p,*r;/定义链队结点的指针定义链队结点的指针q=(QType*)malloc(q=(QType*)malloc(sizeofsizeof(QType);(Q
4、Type);/申请链队的空间申请链队的空间q-front=q-rear=NULL;q-front=q-rear=NULL;/创建空队创建空队whilewhile(onwork=1)(onwork=1)/循环执行循环执行 printf(1:printf(1:排队排队 2:2:储蓄储蓄 3:3:查看排队查看排队 4:4:删除自己所排的队删除自己所排的队 5:5:不再排队不再排队,剩下的客户依次储蓄剩下的客户依次储蓄 6:6:下班下班请选择请选择:);:);scanf(%d,&cho);scanf(%d,&cho);switchswitch(cho)(cho)casecase 1:1:/排队排队pr
5、intf(printf(*输入排队序列号输入排队序列号:);:);dodo scanf(%d,&no);scanf(%d,&no);find=0;find=0;p=q-front;p=q-front;/p/p 指向第一个客户指向第一个客户while(p!=NULL&!find)while(p!=NULL&!find)/在在 p p 不为空不为空&find=0&find=0 即没找到时即没找到时 执行此循环执行此循环if if(p-data=no)(p-data=no)find=1;find=1;elseelsep=p-next;p=p-next;if if(find)(find)/若若 fin
6、d=1find=1 即找到时即找到时printf(printf(*输入的排队序列号重复输入的排队序列号重复,重新输入重新输入:);:);whilewhile(find=1);(find=1);/在在 find=0find=0 即没找到时结束循环即没找到时结束循环p=(QNode*)malloc(sizeof(QNode);p=(QNode*)malloc(sizeof(QNode);/申请空间,创建结点申请空间,创建结点p-data=no;p-next=NULL;p-data=no;p-next=NULL;if if(q-rear=NULL)(q-rear=NULL)/第一个客户排队第一个客户
7、排队 q-front=q-rear=p;q-front=q-rear=p;elseelse q-rear-next=p;q-rear-next=p;/原来最后一个元素指向新入队的元素原来最后一个元素指向新入队的元素q-rear=p;q-rear=p;/修改队尾指针,使其指向当前最后一个元素修改队尾指针,使其指向当前最后一个元素,即将即将*p*p 结点入队结点入队 breakbreak;casecase 2:2:/储蓄储蓄if if(q-front=NULL)(q-front=NULL)/队空队空printf(printf(*没有排队的客户没有排队的客户!n);!n);elseelse/队不空队
8、不空 p=q-front;p=q-front;/p/p 指向第一个客户指向第一个客户printf(printf(*客户客户%d%d 储蓄储蓄n,p-data);n,p-data);if if(q-rear=p)(q-rear=p)/只有一个客户排队的情况只有一个客户排队的情况 q-front=q-rear=NULL;q-front=q-rear=NULL;elseelse q-front=p-next;q-front=p-next;/使使 p p 的下一个结点变成第一个客户的下一个结点变成第一个客户 free(p);free(p);/释放释放 p p 的空间的空间 breakbreak;cas
9、ecase 3:3:/查看排队查看排队if if(q-front=NULL)(q-front=NULL)/队空队空printf(printf(*没有排列的客户没有排列的客户!n);!n);elseelse/队不空队不空 p=q-front;p=q-front;/p/p 指向第一个客户指向第一个客户printf(printf(*排队客户排队客户:);:);whilewhile(p!=NULL)(p!=NULL)printf(%d,p-data);printf(%d,p-data);p=p-next;p=p-next;printf(n);printf(n);breakbreak;casecase
10、4:4:/删除自己所排的队删除自己所排的队if if(q-front=NULL)(q-front=NULL)/队空队空printf(printf(*没有排列的客户没有排列的客户!n);!n);elseelse/队不空队不空 printf(printf(*输入要删除的排队序列号输入要删除的排队序列号:);:);scanf(%d,&no);scanf(%d,&no);find=0;find=0;p=q-front;p=q-front;/p/p 指向第一个客户指向第一个客户whilewhile(p!=NULL&!find)(p!=NULL&!find)/在在p p不为空不为空&find=0&find
11、=0即没即没找到时执行此循环找到时执行此循环 if if(p-data=no)(p-data=no)find=1;find=1;/找到要删除的序列号找到要删除的序列号printf(printf(*客户客户%d%d 删除删除n,p-data);n,p-data);if if(q-front=p)(q-front=p)/删除的正好是第一个客删除的正好是第一个客户的情况户的情况 q-front=p-next;q-front=p-next;/使使 p p 的下一个的下一个结点变成第一个客户结点变成第一个客户free(p);free(p);elseelse if if(p-next=NULL)(p-ne
12、xt=NULL)/删除的正好删除的正好是最后一个客户的情况是最后一个客户的情况 r-next=NULL;r-next=NULL;/r/r 是是 p p 前一个结点前一个结点free(p);free(p);elseelse r-next=p-next;r-next=p-next;free(p);free(p);elseelse r=p;r=p;p=p-next;p=p-next;breakbreak;casecase 5:5:/不再排队不再排队,剩下的客户依次储蓄剩下的客户依次储蓄if if(q-front=NULL)(q-front=NULL)/队空队空printf(printf(*没有排列的
13、客户没有排列的客户!n);!n);elseelse/队不空队不空 p=q-front;p=q-front;/p/p 指向第一个客户指向第一个客户printf(printf(*客户按以下顺序储蓄客户按以下顺序储蓄:);:);whilewhile(p!=NULL)(p!=NULL)printf(%d,p-data);printf(%d,p-data);p=p-next;p=p-next;printf(n);printf(n);onwork=0;onwork=0;/退出退出breakbreak;casecase 6:6:/下班下班if if(q-front!=NULL)(q-front!=NULL)
14、/队不空队不空printf(printf(*请排队的客户明天储蓄请排队的客户明天储蓄!n);!n);onwork=0;onwork=0;/退出退出breakbreak;voidvoid main()main()/主程序主程序 bank();bank();/函数调用函数调用 五五 实验结果(程序执行如下)实验结果(程序执行如下)使用说明:使用说明:程序运行后,界面会跳出“1:1:排队排队 2:2:储蓄储蓄 3:3:查看排队查看排队 4:4:删除自己所排的队删除自己所排的队 5:5:不再排队不再排队,剩下的客户依次储蓄剩下的客户依次储蓄 6:6:下班下班请选择请选择:”的字样。我们可根据需要,选择
15、相应的选项。1 为排队,选 1 后可将输入的序列号排入队中;2 为储蓄,选 2后排在最前面的客户会进行储蓄,然后他的序列号从队列中删除;3 为查看排队,选 3 后会输出目前的所有客户的排队顺序;4 为删除自己所排的队,选4 后界面会跳出“输入要删除的排队序列号输入要删除的排队序列号:”的字样,然后继续输入要删除的序列号,该序列号就会被删除;5 为剩下的客户依次储蓄,选 5 后系统会自动进行该任务;6 为下班,选 6 后程序将会退出。六、自己增加的部分(与源程序的不同)六、自己增加的部分(与源程序的不同)这个程序中选项“4:4:删除自己所排的队删除自己所排的队”是我自己加上去的,程序也是我自己编写的。起先一直有问题,不是第一个客户不能删除,就是最后一个客户不能删除。不过我没有放弃,参看书本,查看资料,耐心研究,终于最后我把它做出来了。七、总结与感想七、总结与感想这次数据结构的大作业,我做了一个模拟客户去银行储蓄的程序。期间我遇到很多困难,尤其是自己编写其中的那段程序时,有好多次运行一直有问题。但我没有灰心,一如既往地耐心探究,终于花了将近一周多的时间,我把它完成了。这次大作业的完成使我更加深刻地认识到数据结构的奇妙。就这么几行代码,有机地组合起来就能完成一个看似不可能的任务。数据结构是一门神奇的科目,虽然它蕴藏了许多知识,但是我相信只要我们静下心来好好去学,我们都能把它学好。
限制150内