标签:表达式 要求 阅读 实验 有一个 情况 ++ int 银行排队
本章主要学习了栈的顺序储存结构及其基本运算的实现,还有就是栈的链式结构。
其中,包含了进站,出栈等一系列的基本操作,栈这章,还学会一个比较重要的就是
将中缀表达式转成后缀表达式,和迷宫找出路。
队与栈的最大不同点就是:栈是先进后后出,而对是先进先出,队中还有一个较为特别
就是循环队,通过队可以找到迷宫的最短路径,同样队用于一些报数问题的解决也是非常的方便。
首先先利用数组a顺序的存放字符串,
同时将这些字符串进栈。
while(top>字符串长度的一半时){
if(栈顶元素=a[i]){
出栈 ,i++;
else 返回错误;
}
主函数:
进栈与判断函数:
将所有的数字按顺序进队
for( int i=1 ; NumOff.size() > 1 ; i++ )
if(i对m取余==0) 输出队顶元素,出队。
else{
记录队顶元素,让队顶元素出队再进队。
}
之前,我是选择用循环队来做的,结果很绕,当时这题绕了很久,做了那么久也就是m>n的那个点对了,
思路是让队顶和队尾后移,直到m处,出队并打印。直到队尾空。当初是这个思路可惜没有实现。
先让所有的人排成一只队伍,
定义数组a[k]表示窗口,初始化窗口=0;
while(队位空){
for(i=0 to i=k){
寻找最小那个窗口的下标,说明这个窗口的人最快结束。
记为L
}
出队 对头
if(队头的人的到达时间t>a[L],说明此人不用排队)
让此人进入此窗口,a[L]=此人来的时间加上操作的时间.
else {
说明此人需要等待
wait 记录等待时间,
在让此人进入窗口
a[L]=a[L]+操作的时间。
}//就这两种情况。
}
}
主函数:
其他进出队的函数:
第一次错误:
这次的错误主要是:假设在1号和2号都空闲的时候,而此时2号窗口的时间更小,按照以上思路会选择2号窗口,
然而题目要求,在窗口都能够选择的时候,应该选择窗口号较小的。所以问题出在这,
改正方法是:在寻找窗口时间最小的for 循环中 加入一条判断 if(此时客户到达的时间>此窗口的时间)退出这个循环。
void algo3(Queue &Q){
Stack S;
int d;
InitStack(S);
while(!QueueEmpty(Q))
{
DeQueue(Q, d);
Push(S, d);
}
while(!StackEmpty(S)) {
Pop(S, d);
EnQueue(Q, d);
}
}
此代码是将队与栈巧妙的结合来将,线性表倒序,
充分的利用了队与栈的不同行。
标签:表达式 要求 阅读 实验 有一个 情况 ++ int 银行排队
原文地址:https://www.cnblogs.com/1028-zwj/p/8824958.html