通用C程序

时间:2013-08-14 12:11:01

标签: c function loops boolean chain

以下代码;

typedef struct chainCell{
   int data;
   struct chainCell* next;
} chainCell;

bool sameValues (chainCell *x, chainCell *y)
{
   if ((x == NULL) & (y == NULL)) return true;
   if ((x == NULL) | (y == NULL)) return false;
   bool same = true;
   chainCell *xp = x, *yp = y; // scan pointers
   while ((xp != NULL) & (same == true)) // point A
   {
      if (xp->data != yp->data) same = false;
      xp = xp->next;
      yp = yp->next;
      if (((xp == NULL) & (yp != NULL)) // point B
           | ((xp != NULL) & (yp == NULL)))
           same = false;
         };
   return same;
};

我很困惑为什么循环控件包含(same == true)

B点的if语句的目的是什么?我不确定布尔表达式正在检查什么?

任何有助于进一步理解的帮助将不胜感激!

4 个答案:

答案 0 :(得分:4)

它检查两个链接列表是否包含相同的值。

显然,如果一个列表较短,则它们不相同(B点)。

注意:我认为在break / return使用会是更好的选择,它会让代码更具可读性。

注2:如评论中所述,那些应该是逻辑运算符。它按原样工作,但有点令人困惑。

注3:您可以在循环内部(while(1))之前移动测试,这样就不需要在循环结束时进行测试。

这只是一个丑陋的代码,它应该是大约5行代码,而不是十几行......

bool sameValues (chainCell *x, chainCell *y)
{
   while(1) {
      if (!x && !y) return true;
      if (!x || !y) return false;
      if (x->data != y->data) return false;
      x = x->next;
      y = y->next;
   }
   return false; //this is just to suppress compiler warning.
};

答案 1 :(得分:0)

函数bool sameValues (chainCell *x, chainCell *y)检查两个struct chainCell是否具有相同的值,也就是说,x和y之间的chainCell类型的每个字段都相等。

  

“为什么循环控件包含(相同== true)?”

布尔值same是指示先前检查的字段是否相等的指示符。如果same == false,则推断x和y的值不相同,而while循环可能会中断。

  

B点的if语句的目的是什么?

if语句设置两个字段可以相等的条件,仅当两个字段都为null或两者都不为空时。

答案 2 :(得分:0)

紧张形式的@Karoly Horvath的回答:

bool sameValues (chainCell *x, chainCell *y)
{

   for( ; x || y; x = x->next, y = y->next) {
      if (!x || !y) return false;
      if (x->data != y->data) return false;
   }
   return true;
}

答案 3 :(得分:0)

据我所知,代码是一个循环来检查两个chainCell对象是否相同。

如果找到了cellChains中不匹配的位置,则会包含

(相同== true)以使while循环退出。

B点正在检查如果被比较的任何一个chainCell为null而另一个不为null,则比较返回false。

循环的退出是由xp到达它为空的点。

我也同意Shafiks的评论,操作员是按位的,他们应该是合乎逻辑的。