博客作业03--栈和队列

1.学习总结

思维导图

1233757-20180414180626232-656770757.png

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. 代码截图

1233757-20180414131217792-553466245.png

3.PTA提交列表说明

1233757-20180414131355821-2068105517.png

  • 这题没有遇到什么大问题,主要要理解判断的方法,先将数组元素进栈,再逐个出栈比较,在编译器上碰到死循环的时候,主要判断循环结束是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. 代码截图

1233757-20180414132740366-177087344.png

3.PTA提交列表说明

1233757-20180414132918632-250183237.png

  • 一开始部分正确,只对了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. 代码截图

1233757-20180414134931529-1022819468.png
1233757-20180414134955311-926901416.png

3.PTA提交列表说明

1233757-20180414140105297-1383680362.png

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

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

  • 本次总分:100+105=205

3.1 栈PTA排名

1233757-20180414173437109-392000797.png

3.2 队列PTA排名

1233757-20180414173553729-1548837403.png

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提交记录截图

1233757-20180414200346677-450404287.png

转载于:https://www.cnblogs.com/mayifang/p/8834752.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值