C语言里if((i=!i)!=0)什么意思
voidf31(stack*S){QueueQ;StackT;inti=0;InitQueue(&Q);InitStack(&T);While(!StackEmpty(S...
void f31 (stack *S)
{
Queue Q;
Stack T;
int i=0;
InitQueue(&Q);
InitStack(&T);
While(!StackEmpty(S))
if((i=!i)!=0) Push(&T,Pop(S));
else EnQueue(&Q,Pop(S));
......
其中i指什么?书上说是S元素出栈,奇数入栈T,偶数入队Q,是这样吗?
谢谢你的回答,但是i是指的什么啊?记录哪个的? 展开
{
Queue Q;
Stack T;
int i=0;
InitQueue(&Q);
InitStack(&T);
While(!StackEmpty(S))
if((i=!i)!=0) Push(&T,Pop(S));
else EnQueue(&Q,Pop(S));
......
其中i指什么?书上说是S元素出栈,奇数入栈T,偶数入队Q,是这样吗?
谢谢你的回答,但是i是指的什么啊?记录哪个的? 展开
展开全部
if((i=!i)!=0)意思是:
首先将i取非(计算机以二进制表示,其中0通常代表假,1代表真),然后赋值给i,再判断是否等于0,若不等于0则执行Push(&T,Pop(S));
否则执行EnQueue(&Q,Pop(S));
因为i的初值是0故第一步判断后执行Push(&T,Pop(S))
第二步执行EnQueue(&Q,Pop(S));
所以书上说的正确。
仅供参考!
不好意思先前的回答有点问题,现在改了。
这里的i其实没有记录数据,它的作用是:
第一次循环:其初值0,然后取非变为1;然后if语句判断是否为零。(显然第一次)
第二次时i的值已经变为1了,然后取非变为0,然后判断······
一直到循环结束。
首先将i取非(计算机以二进制表示,其中0通常代表假,1代表真),然后赋值给i,再判断是否等于0,若不等于0则执行Push(&T,Pop(S));
否则执行EnQueue(&Q,Pop(S));
因为i的初值是0故第一步判断后执行Push(&T,Pop(S))
第二步执行EnQueue(&Q,Pop(S));
所以书上说的正确。
仅供参考!
不好意思先前的回答有点问题,现在改了。
这里的i其实没有记录数据,它的作用是:
第一次循环:其初值0,然后取非变为1;然后if语句判断是否为零。(显然第一次)
第二次时i的值已经变为1了,然后取非变为0,然后判断······
一直到循环结束。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询