微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 栈的经典运用

栈的经典运用

时间:12-01 来源:互联网 点击:

为了分析上面的代码准确性,写了如下的测试代码:

int main()
{
string s1;
cout < "Input a string to test the balance :" < endl;
cin >> s1;
isbalance(s1);
#if 10
string src;
string dst;
cout < "Input a expression: " < endl;
cin >> src;
midtolast(src,dst);
cout < "After the convertion: " < endl;
cout < dst < endl;
cout < "The result of expression: " < endl;
cout < retVal(dst) < endl;
#endif
return 0;
}

测试结果:

[gong@Gong-Computer data_struct]$ vi testblance.cpp
[gong@Gong-Computer data_struct]$ g++ -g testblance.cpp -o testblance
[gong@Gong-Computer data_struct]$ ./testblance
Input a string to test the balance :
This(is)[a]{te}.
string is
Input a expression:
3*3-(5-2+3*6)*(7-3*1)
After the convertion:
33*52-36*+731*-*-
The result of expression:
-75

从上面的测试结果基本上实现符号平衡测试、表达式的求值问题,但是当前的表达式只能计算0-9为操作数的四则运算,复杂的多位数还不能进行测试。

以上的三个例子是栈的经典运用,对栈的特性先入后出有更深层次的理解才能更好的运用。

在函数调用中,如果不保存调用程序的状态,在被调用程序中就会修改程序的状态,这时候也就不能还原到之前的状态,只有将当前的状态保存起来,压入栈中,当被调用程序执行完成以后,将当前程序栈中的内容弹出就能实现任务状态的还原,当前函数执行完成以后,调用该函数的状态也需要还原。这时候就实现了先调用的函数最后执行,所以说函数调用是典型的先入后出问题。这也说明为什么栈如此的重要。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top