博客作业03--栈和队列

1.学习总结

思维导图

2.PTA实验作业

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

1.设计思路

定义栈指针s,定义n保存返回值;
输入一个字符串str;
动态申请空间;
调用函数symmetry;
n=0,输出no;n=1;输出yes;
bool symmetry(ElementType str[])
{
       定义e保存出栈元素,定义栈指针st;
       动态申请空间;
       for i=0  to str[i]!='\0'  i++;
              进栈
       for i=0  to str[i]!='\0'  i++;{
              出栈
              如果str[i]!=e   return false;
       }
       return true;
}

2. 代码截图

3.PTA提交列表说明

  • 这题没有遇到什么大问题,主要要理解判断的方法,先将数组元素进栈,再逐个出栈比较,在编译器上碰到死循环的时候,主要判断循环结束是str[i]=='\0'。

题目2:7-1 报数游戏

1.设计思路

定义n,m;定义队列指针q;定义e保存出队元素,flag判断输出格式,num=0判断何时输出
输入n,m;
如果m>=n    输出error;
申请空间;
for i=1  to  n
     入队1到n的元素
while(!QueueEmpty(q)
{
     num++;
     如果n!=m     出队;入队;
     否则   出队,按格式输出e,将num置为0;
}

2. 代码截图

3.PTA提交列表说明

  • 一开始部分正确,只对了m>=n的情况,后面部分正确只对了m<n的情况,经过调试,发现m>=n的时候,输出error后,还会执行下面的代码,所以在m>=n的时候,缺少了结束程序,在输出error后return,得到正确答案。

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

1.设计思路

定义两个队列指针p,q;p存偶数,q存奇数;
定义n,m;定义e1,e2,e3保存出队元素;
申请空间;
输入n;
for i=0  to  n-1
     输入m;
     如果m为偶     入p队;
     否则        入q队;
while(!QueueEmpty(q)&&!QueueEmpty(p))
{
        出队两个q队元素e1,e2,一个p队元素e3;
        按格式输出e1,e2,e3;
}
while(!QueueEmpty(q))
{
        出队两个q队元素e1,e2;
        按格式输出e1,e2;
}
while(!QueueEmpty(p))
{
        出队一个p队元素e3;
       按格式输出e3;
}

2. 代码截图


3.PTA提交列表说明

  • 本题没有什么大的问题出现,主要有函数第二题为模板,需要注意的是,A,B两个的效率不一样,所以定义了三个e保存出队元素,还有就是,队列不为空时的判断,还要继续输出。

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

  • 本次总分:100+105=205

3.1 栈PTA排名

3.2 队列PTA排名

3.3 我的总分:2分

4. 阅读代码

用栈表示队列

class Queue {
public:
    stack<int> tmp, s;
    // Push element x to the back of queue.
    void push(int x) {

        while (!s.empty()){
            tmp.push(s.top());
            s.pop();
        }
        tmp.push(x);
        while (!tmp.empty()){
            s.push(tmp.top());
            tmp.pop();
        }
    }

    // Removes the element from in front of queue.
    void pop(void) {
        s.pop();
    }

    // Get the front element.
    int peek(void) {
        return s.top();
    }

    // Return whether the queue is empty.
    bool empty(void) {
        return s.empty();
    }
};
  • 用两个栈tmp和S,tmp当做中介。每次有push操作时,先将s中的元素全部倒入tmp中(s若为空则无操作),此时再进行push操作压入新元素。 操作完成后再将tmp中所有元素倒入s中,从s中弹出的元素即为队列元素的弹出顺序。pop操作则为s.pop(),empty则为s.empty()。top操作也是取s的top。

5. 代码Git提交记录截图

posted @ 2018-04-14 20:05  晴天*  阅读(246)  评论(2编辑  收藏  举报