zoukankan      html  css  js  c++  java
  • 博客作业03--栈和队列

    1.学习总结

    1.1

    顺序栈,链栈,顺序队列,环形队列,链式队列

    1.2

    2.PTA实验作业

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

    2.2 设计思路

    for i=0 to str[i]==''
      将str[i]的字符入栈到st
    end
    for i=0 to str[i]==''
      将字符出栈赋予e
      若str[i]!=e,则不对称,返回false
      若str[i]==e,则继续循环,直到遍历完数组。
    end
    返回true
    

    2.3 代码截图

    2.4 PTA提交列表说明

    • 1.一开始输入字符串用的是getchar( )循环,但一直段错误。
      解决方法:用gets直接输入字符串。

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

    2.2 设计思路

    输入用户
    for i=0 to i<n
    	若为偶数,则qb.push(a[i]),否则qa.push(a[i])。
    end for
    while(!qa.empty()&&!qb.empty())
        队列a出队两次
        队列b出队一次
    end
    剩下那队的全部出队
    输出
    

    2.3 代码截图


    2.4 PTA提交列表说明

    • 没有什么大问题

    2.1 题目3:7-3 银行排队问题之单队列多窗口服务

    2.2 设计思路

    创建结构体person,存放每个人的信息,创捷结构体window,存放每个窗台信息。
    for  i=0 to i<N
        输入每个用户的到达时间t和所需时间p并将所有人的wait时间初始化为0
        if(p>60) p=60
    end
    for  i=0 to i<K
        初始化每个柜台的时间和服务人数。
    end
    定义 maxwait=0,sumwait=0,flag=0;
    while(!Q.empty())
        for(i=0; i<K; i++)
            若W[i].t1<=Q.front().t,则当前顾客不需要等待,然后对柜台时间进行计算W[i].t1=Q.front().t+Q.front().p ,柜台服务人数W[i].num++,flag=1表明柜台已经有人在使用,该用户出队,break跳出循环。
        end for
        若flag==0,则当前顾客需要选择最优窗口等待。
        定义 minwait=666666,tmp。
        for(i=0; i<K; i++)遍历柜台,若有柜台时间W[i].t1<minwait,则minwait=W[i].t1,用tmp记下是哪个柜台时间最短tmp=i
        end for
        柜台存在,则该用户需要等待时间Q.front().wait=minwait-Q.front().t,并求和等待时间sumwait+=Q.front().wait,该柜台服务时间W[tmp].t1+=Q.front().p;
        若Q.front().wait>maxwait,maxwait=Q.front().wait,柜台服务人数再加一W[tmp].num++,然后该用户出队。
    end while
    int lastTime=0;
    for(i=0;i<K;i++)遍历柜台,看谁的时间最长,则 lastTime=W[i].t1
    输出平均等待时间,最长等待时间、最后完成时间。
    

    2.3 代码截图



    2.4 PTA提交列表说明

    • 1.一开始没用用两个结构体导致用户和柜台的关系不清楚,难以进行操作。
      解决方法:参考了网上的资料。
    • 2.在计算Q.front().wait时,没有具体搞清相差的时间,算错了。
      解决方法:改成Q.front().wait=minwait-Q.front().t

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

    3.1 栈PTA排名

    3.2 队列PTA排名

    3.3 我的总分:230

    4. 阅读代码

    public static ArrayList<Integer> twoStacksSort(int[] numbers) {  
            if(numbers == null)  
                return null;  
            Stack<Integer> stack = new Stack<Integer>();  
            for(int i = numbers.length - 1; i >= 0; i--){  
                stack.push(numbers[i]);  
            }  
            Stack<Integer> help = new Stack<Integer>();  
            int pop,temp;  
            while(!stack.isEmpty()){  
                pop = stack.pop();  
                if(help.isEmpty()){  
                    help.push(pop);  
                }else{  
                    if(pop <= help.peek()){  
                        help.push(pop);  
                    }else{  
                        while(!help.isEmpty() && pop > help.peek()){//将help中元素放入到stack中  
                            temp = help.pop();  
                            stack.push(temp);  
                        }  
                        //help栈为空了或者找到了pop<=help栈顶的元素  
                        help.push(pop);  
                    }  
                }  
            }  
            while(!help.isEmpty()){  
                stack.push(help.pop());  
            }  
            ArrayList<Integer> res = new ArrayList<Integer>();  
            while(!stack.isEmpty()){  
                res.add(stack.pop());  
            }  
            return res;  
        }  
    
    • 该代码的作用是对栈中元素排序。假设栈stack是存放原来数据的,再定义一个辅助栈help,先从stack栈中取出栈顶元素pop,将pop和help中栈顶元素比较,如果pop <= help栈顶元素,将pop压入到help栈中;如果pop > help栈顶元素,取出help栈顶元素,将其放入到stack栈中,直到help为空或者pop <= help栈顶元素。
    • https://blog.csdn.net/shakespeare001/article/details/51469268

    5. 代码Git提交记录截图

  • 相关阅读:
    gdb调试libtool封装的可执行文件
    转载 Linux top命令详解
    VirtualBox使用物理硬盘建立磁盘
    【sqlServer】常用语句整理
    【c#基础】特殊集合
    【c# 基础】各种集合的不同情况下的性能
    【c#集合】Lookup 类 有序字典 SortedDictionary<TKey,TValue> 集
    【c#基础】集合--栈Stack 链表 LinkList 有序列表SortedList 字典Dictionary
    【c#基础】集合
    【c#基础】委托、Lambda表达式和事件
  • 原文地址:https://www.cnblogs.com/oracler0103/p/8820618.html
Copyright © 2011-2022 走看看