博客作业03--栈和队列

Posted 过客、、

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了博客作业03--栈和队列相关的知识,希望对你有一定的参考价值。

1.学习总结(2分)

思维导图

2.PTA实验作业(4分)

2.1 题目1:7-1 jmu-报数游戏(15 分)

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

定义一个新队列  
  for  i=1 to i<=n
     把各个元素一一存放到队列中

while   q.size()!=1
      如果0==((i+1)%m)且q.size()<m
           找到该元素,直接输出队列的头元素,再把该元素出队列
      否则
           不是目标元素,把该队列的头元素取出再放到队列结尾

不断循环以上操作,直到队列中只剩一个元素,最后输出最后一个元素

2.3 代码截图

2.4 PTA提交列表说明。

写这道题不知道怎么用队列来实现这个算法,后来通过画示意图,得到了一个规律,就是不断把前面元素放到结尾,但是完全不会影响到要退出圈子的人的顺序,知道这个规律后,再运用queue头文件,就不难写出该代码。

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

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

定义两个新队列A和B
	for  i=0  to  i<n  
		输入的数为奇数入的A队列,为偶数入B队列
	end i
        当A.size()!=0且B.size()!=0
	      A中头元素为最先办理的,输出该值后出队列,再输出A的新头元素并出队列。
              第三个办理的是B头元素,输出该值并出队列。
       不断循环上式,直到其中一个队列全部人都办理完业务
	当B.size()!=0或A.size()!=0
		输出B(A)头元素并出队列
        循环直到B(A)队列都办理完业务

2.3 代码截图


2.4 PTA提交列表说明。


这个代码比较简单,只要把元素按奇偶分类成两个队列,再把两个队列中的元素按办理时间顺序依次输出。要注意的是输出A队列的第一个数后,不能直接就输出第二个,要先判断此时的A队列是否为空。

2.2 题目3:7-1 jmu-字符串是否对称(20 分)

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

gets(a);
建立新栈CreateStack(Maxsize)
for    j=0    a[j]!=\'\\0\'
      把数组中的元素一一入栈
end j
for    j=0    a[j]!=\'\\0\'
     把栈中的元素一一出栈,并分别跟a[j]比较

    如果存在 出栈元素!=a[j],证明不是对称字符串
    如果循环正常跳出,即所有出栈元素均=a[i],证明是对称字符串
end j

2.3 代码截图

2.4 PTA提交列表说明。


刚开始提示段错误,但devc上明明可以运行,后来把
改成gets(a),就能通过了。

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

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

3.1 栈PTA排名

3.2 队列PTA排名

3.3 我的总分
208

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

使用两个栈实现一个队列

template <typename T>
class CQueue
{
public:
    CQueue(void)
    {}
    ~CQueue(void)
    {}
    void appendTail(const T& node);
    T deleteHead();
private:
    stack<T> stack1;
    stack<T> stack2;
};

template<class T>
void CQueue<T>::appendTail(const T& node)//在队列尾部添加数据
{
    stack1.push(node);
}
template<class T>
T CQueue<T>::deleteHead()
{
    T tmp = 0;
    if (stack2.empty()) //若栈2为空
    {
        while (!stack1.empty())
        {
            tmp = stack1.top();
            stack2.push(tmp);
            stack1.pop();
        }
    }
    tmp = stack2.top();
    stack2.pop();
    return tmp;
}

入队列:直接压入元素至栈1
出队列:如果栈2不为空,把栈2中的栈顶元素直接弹出。否则,把栈1的所有元素全部弹出压入栈2中,再弹出栈2的栈顶元素
这种方法思路比较简单,比较好操作。

5. 代码Git提交记录截图

以上是关于博客作业03--栈和队列的主要内容,如果未能解决你的问题,请参考以下文章

博客作业03--栈和队列

博客作业03--栈和队列

博客作业03--栈和队列

博客作业03--栈和队列

博客作业03--栈和队列

博客作业03--栈和队列