题目是要实现进制转换,各函数已定义template<class type>void DSeqStack<type>::convertion(){int s,n;cout<<"输入一个需要转换的数据:"<<endl;cin>>s;cout<<"输入一个需要转换成的进制:"<<endl;cin>>n;while(s!=0){Push(s%n);s=s/n;}cout<<"数据转换成"<<n<<"进制后为:"<<endl;while(!isEmpty())cout<<Pop();cout<<endl;/*cout<<"数据转换成"<<n<<"进制后为:"<<Pop()<<endl;*/}void main(){DSeqStack<int> stack(10);stack.convertion();}已经限定s!=0了,栈就一定不为空,为什么还需要while(!isEmpty),而且去掉while(!isEmpty)就只输出一个数了
2 回答
慕姐8265434
TA贡献1813条经验 获得超2个赞
s!=0是确定栈非空
再执行以下程序
不然空的也执行,不是浪费资源吗?而且也会最后出错。
是程序开始的断点.必须要有!
while(!isEmpty)是输出循环判定条件
意在循环
目的就是把栈中元素全部输出,一直做出栈运算
直到栈空
是动态循环的
缺失此循环条件,只输出当前的栈顶元素,程序结束。
是静态的
慕沐林林
TA贡献2016条经验 获得超9个赞
while(!isEmpty())
cout<<Pop();
cout<<endl;
这三句语句相当于
while(!isEmpty())
{
cout<<Pop();
cout<<endl;
}
C++中的Pop()函数和Push()一样,一次进栈只能进一个,一次出栈也只能出一个数。所以必须要循环输出
至于循环条件为什么要用IsEmpty(),是因为如果栈中的数据全部取出来的话,编译器会自动生成标识,标记栈为空,IsEmpty()得到的就是0,就跳出循环了
- 2 回答
- 0 关注
- 284 浏览
添加回答
举报
0/150
提交
取消