博客作业03--栈和队列

1.学习总结(2分)

2.PTA实验作业(4分)

2.1 题目1:7-1 字符串是否对称

2.2 设计思路(伪代码或流程图)

主函数:
     创建栈S,字符数组str[80],整型变量flag=0
     输入字符串到字符数组中
     把字符数组的字符一个个放入栈S
     for(i=0;str[i];i++){
	     出栈S
         把出栈的元素与str[i]比较
         if(出栈元素与str[i]不相等)  flag=1;
	}
	if(flag==0) 输出yes
	else  输出no

2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)

2.4 PTA提交列表说明。

该题自己在devC++调节输出正确后pta没有出现问题

2.1 题目2:7-1 报数游戏

2.2 设计思路(伪代码或流程图)

主函数:

      定义变量 number存放数值,numbers存放个数
      输入numbers,number的值
      新建并初始化队列,长度为numbers+1
      if(numbers<=number)输出error
      for(i=1;i<=numbers;i++){
    	利用循环把数据i入队列;
	}
       while(队列非空){
            for(i=1;i<number;i++){
    		把小于number的数一个个先出队列,再加入队列,排到后面;
		}
       
       输出此时队列的第一个数
       
      }


2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)

2.4 PTA提交列表说明。


自己在一开始是以数组与队列结合的另一种比较复杂的方法做的,devC++运行的答案一直不符,自己调试后发现count值的增加有问题


count值在没进入条件时也会一直增加,自己放入pta发现也只有部分正确,输出的点错误

后看到书上的方法,比较简单,对队列的运用灵活,后自己学习书的方法去书写

在思考后自己的输出一开始并不正确,后发现自己的maxsize较小一个问题,所以在满时反而满足空的条件无法执行一些步骤

导致输出的问题,后自己把长度改为numbers+1

2.1 题目3:7-2 银行业务队列简单模拟

2.2 设计思路(伪代码或流程图)


主函数:

     定义变量 number存放数值,numbers存放个数,循环变量i
     输入numbers的值
     新建并初始化队列q与Q来表示A,B窗口,长度都为numbers+1
       for(i=0;i<numbers;i++){
    	 输入number的值;
    	 number为奇数放入q队列,偶数放入Q队列;
	}

    while(Q,与q都非空){
        出队列q并输出两个元素;
        出队列Q并输出一个元素   //2奇1偶输出  
     }
    while(Q非空){出队列Q并输出元素;}
    while(q非空){ 出队列q并输出元素;}
 

2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)


2.4 PTA提交列表说明。



自己一开始对队列空时的判断缺乏,读题不仔细只考虑到两个都有为2奇1偶输出的情况

添加Q与q队列有一个不为空输出的相关条件后,部分正确

后发现是自己在修改时添加的一个条件语句出错忘记删除,删除后正确

3.截图本周题目集的PTA最后排名(3分)

本次2个题目集总分:125+215=340分
必做题共:205分

3.1 栈PTA排名

3.2 队列PTA排名

3.3 我的总分:173

本题评分规则:

(1)2个题目集PTA总分340分:3分(全部题目都做)
(2)PTA总分在205分--340分:2.5分(必做题全部做完,选做题做部分)
(3)PTA总分在110--205分:2分(必做题大部分做完)
(4)PTA总分在90--110分:1.5分
(5)PTA总分在55分-90分以下:1分
(6)PTA总分在55分以下:0分

4. 阅读代码(必做,1分)


#include<iostream>  
#include<cstdio>  
#include<algorithm>  
using namespace std;  
int a[100005];  
int rail[100005];//数组的值表示当前轨道最左边列车   
int cnt;  
void Binary_search(int x)//二分搜索轨道数组   
{  
    int l , r, mid;  
    l = 1;  
    r = cnt;  
    while(l < r)  
    {  
        mid = l + (r - l)/2;  
        if(rail[mid] > x) r = mid;  
        else if(rail[mid] < x)l = mid + 1;  
    }  
    rail[r] = x;  
}  
int main()  
{  
    int n, i, j;  
    scanf("%d", &n);  
    for(i = 1; i <= n; i++)  
    {  
        scanf("%d", &a[i]);  
    }  
    cnt = 0;  
    for(i = 1; i <= n; i++)  
    {  
        if(cnt == 0)//当没有列车在中间轨道时   
        {  
            cnt++;  
            rail[cnt] = a[i];  
        }  
        else  
        {  
            if(rail[cnt] < a[i])//轨道上的列车都比当前列车小   
            {  
                rail[++cnt] = a[i];  
            }  
            else Binary_search(a[i]);  
        }  
    }  
    cout<<cnt<<endl;  
    return 0;  
}  

  

代码链接:https://blog.csdn.net/l_bestcoder/article/details/51944438

代码功能:实现列车调度问题

代码优点:利用数组rail[cnt]在保留列车同时记录轨道数,表示多条轨道上的此时列车值

当好几条轨道上的列车都比当前列车大,利用二分查找到最小最适合的一辆跟后面,这里用法巧妙,效率提高

5. 代码Git提交记录截图



posted @ 2018-04-14 21:11  hahaha233  阅读(431)  评论(4编辑  收藏  举报