C语言里if((i=!i)!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,谢谢你

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/05 03:25:14

C语言里if((i=!i)!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,谢谢你
C语言里if((i=!i)!
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是指的什么啊?记录哪个的?

C语言里if((i=!i)!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,谢谢你
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,然后判断······
一直到循环结束.