第03次作业-栈和队列
Posted 吴修恩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第03次作业-栈和队列相关的知识,希望对你有一定的参考价值。
1.学习总结
2.PTA实验作业
2.1题目1:符号配对
2.2 设计思路
定义全局变量int flag=1;
int len;
char a[1000];
Stack s; s=createstack(200); while(1){ 输入字符串 if(当字符串第一个元素为‘.’)跳出循环; if(flag==0)continue;//未遇到\'.\'时继续循环 读取字符串长度len; int i=0; for(当i小于长度len){ if(a[i]==\'(\'||a[i]==\'[\'||a[i]==\'{\'){ 将a[i]入栈; } else if(a[i]==\'/\'&&a[i+1]==\'*\'){ a[++i]=\'<\';//将/*转化为< 将a[i]入栈; } else if(a[i]==\')\'||a[i]==\']\'||a[i]==\'}\'||a[i]==\'*\'&&a[i+1]==\'/\'){ if(a[i]==\'*\'&&a[i+1]==\'/\') a[++i]=\'>\';//将*/转化为> if(flag==1)比对栈顶元素的括号是否与a[i]相匹配; } if(flag==0)break;//当flag为0时说明符号不匹配,跳出循环 } }
return 0;
2.3代码截图
2.4PTA提交列表说明
第五个测试点一直无法过,直到我将/*转化为<,*/转化为>,才通过测试。
2.1题目2:报数游戏
2.2 设计思路
int n,m;//n为游戏人数,m为退出圈子的位次 输入n,m; if(当m大于n时){ 输出"error!"; return 0; } 建立空队列q; int i=1; while(i小于等于n){ 将1到n依此入队; } int j=m;//用来更新m int k;//记录出队的元素 while(当队列不为空){ while(--m){ 将前队列的头移到队列尾; }//将m个数移到队列尾 if(当队列中只有一个元素时){ 输出该元素; 跳出循环; } else{ 删除队列头元素,并输出该元素; } m=j;//更新m的值使它为原来的退出位次 }
return 0;
2.3代码截图
2.4PTA提交列表说明
本以为自己输出的最后没有空格,经再三检查终于发现判断语句中出现了一些问题,我把(队列只剩下最后一个元素)判断写成了(队列为空)
2.1题目3:银行排队问题之单队列多窗口服务
2.2 设计思路
建立一个队列q; int i,n,h; 输入顾客人数n; for(i=0;i<n;i++){ 将处理时间超过60的,改为60 将顾客到达时间和处理时间入队 } 输入窗口数h; int wait=0,maxw=0;//等待时间和最长等待时间 double sum=0;//等待总时长 int win[11]={0},num[11]={0};//记录窗口完成时长和窗口接待人数 while(当队列不为空){ int m1=0,m2=99999,flag=0;//m1最快完成的窗口下标,m2记录最快完成时长,flag判断是否需要等待 for(i=0;i<h;i++)//遍历每个窗口 { if(若顾客的到达时间q.front().t >= 窗口的处理完成的时长win[i]){ num[i]++;//该窗口处理人数加一 win[i]=q.front().t+q.front().p;//该窗口处理完成时间更新 出队; flag=1;//不需要等待 break; } if(m2>win[i]){ 记录最快完成的窗口下标m1和等待时间m2 } } if(当flag==0时)//需要等待 { wait=win[m1]-q.front().t;//等待时间 if(wait>maxw)maxw=wait;//对比每次的等待时间,找到最长的等待时间 sum=sum+wait;//更新等待总时长 win[m1]=win[m1]+q.front().p;//最快完成窗口的处理时长更新 num[m1]++; 出队; } } int ltime=0;//最后完成时长 for(i=0;i<h;i++){ 遍历所有窗口,找到最长的完成时间win[] } 输出平均等待时间sum/n、最长等待时间maxw、最后完成时间ltime 输出各个窗口的服务人数num[] return 0;
2.3代码截图
2.4PTA提交列表说明
两处错误是因为我判断队头顾客无需等待时,未跳出循环,导致flag无法判断队列的下个元素是否需要等待
即缺少了break。
3.截图本周题目集的PTA最后排名
3.1栈PTA排名
3.2队列PTA排名
3.3我的总分:2.5
必做题做完选做做部分。
4. 阅读代码
代码功能:中缀表达式转化为后缀表达式
代码优点:1代码简洁。2用map将符号的优先级改为用数字表示,更易理解。
代码链接:https://www.cnblogs.com/8023spz/p/7635353.html
5. 代码Git提交记录截图
以上是关于第03次作业-栈和队列的主要内容,如果未能解决你的问题,请参考以下文章