什么情况下,才会用到,最近才豁然醒悟,简单的记录下来。
1 等待的时候用。
举个例子,一个任务流,刚进入流的时候,首先过滤到任务的名称,记录此名称的任务,并将任务压入stack,下一次接受到数据后,从stack中peek出来此任务,直到接收到任务结束符,才pop掉此任务。
然后等待下一个任务名称的到来。
简单的事例代码
stack
job j =null;
foreach(Item item in Items)
{
if(item.start)
{
jobs.push(item);
}
if(jobs.count>0)
{
j= jobs.peek();
}
if(j!=null && item.end)
{
j.completed=true;
jobs.pop();
j=null;
}
}
2 嵌套场合用。嵌套场合使用stack,可以迅速将问题简单化。
举个过滤代码的例子,
_____________________________
1 Do While
2 if isOK then
3 select case
4 case 1
5 case 2
6 case 3
3 end select
2 end if
7 for i=0 to 100
8 ...
7 next i
1 Loop
___________________________
使用stack,可以轻松的对Do While Loop, if then end if, for next 的嵌套关系做处理。
最先进入的do while,肯定是最后处理对应的loop.
基于以上的理解,终于搞明白了,堆栈在函数调用中担当的角色。
一个启动函数调用函数A,就将A压入堆栈,直到A返回值,才将A从堆栈中弹出。
同样A调用B,就先将B压入,B再调用C,就再将C压入,然后再从最后一个被调用的函数返回值开始,顺次从堆栈中弹出。这就是stack堆栈的最后进最先出的奥妙。
没有评论:
发表评论