栈的经典运用
为了分析上面的代码准确性,写了如下的测试代码: int main() 测试结果: [gong@Gong-Computer data_struct]$ vi testblance.cpp 从上面的测试结果基本上实现符号平衡测试、表达式的求值问题,但是当前的表达式只能计算0-9为操作数的四则运算,复杂的多位数还不能进行测试。
{
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]$ 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
以上的三个例子是栈的经典运用,对栈的特性先入后出有更深层次的理解才能更好的运用。
在函数调用中,如果不保存调用程序的状态,在被调用程序中就会修改程序的状态,这时候也就不能还原到之前的状态,只有将当前的状态保存起来,压入栈中,当被调用程序执行完成以后,将当前程序栈中的内容弹出就能实现任务状态的还原,当前函数执行完成以后,调用该函数的状态也需要还原。这时候就实现了先调用的函数最后执行,所以说函数调用是典型的先入后出问题。这也说明为什么栈如此的重要。
程序栈数据结 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)