本文为原创,若有错误欢迎批评指正!
最近在尝试着把栈的一些应用,例如进制转换、括号匹配、逆波兰计算取、中后缀转换等写成一个大的demo,于是被数据类型的问题搞得略纠结。
主要的问题在于初始化,如果栈中元素是int类型的,初始化的时候用户通过scanf函数输入整型,需要设置一个停止的标识。很多例程中采用数字0或者其他数字作为停止符,这样的问题就是0永远都没有机会出现在栈中。那么问题就来了,怎么设定一个可以检测的标志,结束栈的输入初始化呢?
一. 选取一个永远不可能入栈的按键
最容易想到的就是ESC键。对应的ASCII码为27,注意此时不能使用标准IO,要用控制台IO。
#include <windows.h>
#include <conio.h>
while(1)
{
c = _getch();
if(c==27)
break;
else
{
e = (int)(c-'0');
Push(S,e);//入栈
}
}
缺点:只能输入个位数,而且[](){}之类的都存储为ASCII码值。