Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我的名单加起来不正确_C++_Data Structures_Linked List_Stack - Fatal编程技术网

C++ 我的名单加起来不正确

C++ 我的名单加起来不正确,c++,data-structures,linked-list,stack,C++,Data Structures,Linked List,Stack,到目前为止,我已经问了很多关于同一代码的问题,但这肯定是最后一个错误,这次我所要求的只是指导,看看我是否在修复它的正确轨道上。我将在下面显示我得到的输出: 我将再次显示我期望收到的输出 现在我想发生的是,当s2设置为0时,我相信s1=s1+s2部分没有认识到s2是空的,因为它以0开头?但是总的来说,s2堆栈在应该是空的时候并不是空的,我真的不明白当它被设置为NULL时会是什么样子 我将显示将列表添加到一起的功能: Stack operator+(const Stack& s) con

到目前为止,我已经问了很多关于同一代码的问题,但这肯定是最后一个错误,这次我所要求的只是指导,看看我是否在修复它的正确轨道上。我将在下面显示我得到的输出:

我将再次显示我期望收到的输出

现在我想发生的是,当s2设置为0时,我相信
s1=s1+s2
部分没有认识到s2是空的,因为它以0开头?但是总的来说,s2堆栈在应该是空的时候并不是空的,我真的不明白当它被设置为NULL时会是什么样子

我将显示将列表添加到一起的功能:

Stack operator+(const Stack& s) const
    {
        // copy the first list
        Stack t = *this;
        Stack u = *this;
        Node *n = s.top;

        // iterate through the second list and copy each element to the new list
        while (n != NULL && !t.IsFull())
        {
            t.Push(n->data);
            n = n->link;
        }
        n = t.top;
        while(n != NULL && !t.IsEmpty())
        {
            u.Push(n->data);
            t.Pop();
            n = t.top;
        }

        return u;
    }
在上面的代码中,我尝试返回t,结果导致
*s1=s1+s2
为空,因此我相信问题可能在这段代码或以前的代码中的某个地方,我还将在下面显示我的
运算符=
函数:

void operator=(const Stack& s)
    {
        if (s.top == NULL){
            num_items = 0;
            top = NULL;}
        else
        {
            top = new Node;
            top->data = s.top->data;
            Node* newP = top;
                num_items = 1;
                for(Node* curr = s.top->link; curr != NULL; curr = curr->link)

                {
                    if(num_items != MAX_SIZE)
                    {
                    newP->link = new Node;
                    newP = newP->link;
                    newP->data = curr->data;
                    ++num_items;
                    }
                }
        }
    }
编辑:我把整个程序贴在下面,希望它能把问题弄清楚


问题不在
s2
中,问题在
操作员+
中。让我们在操作符中放入一些
cout
语句,看看发生了什么:

Stack operator+(const Stack& s) const
{
  // copy the first list
  Stack t = *this;
  Stack u = *this;
  Node *n = s.top;

  // iterate through the second list and copy each element to the new list
  while (n != NULL && !t.IsFull())
  {
    t.Push(n->data);
    n = n->link;
  }

  cout << "end of first while loop, t is " << t << endl;

  cout << "entering second while loop, u is " << u << endl;

  n = t.top;
  while(n != NULL && !t.IsEmpty())
  {
    u.Push(n->data);
    t.Pop();
    n = t.top;
  }

  cout << "end of second while loop, u is " << u << endl;

  return u;
}

在第一个循环的末尾,所有元素都在t中,但顺序错误,并且不清楚如何重新排列它们。在第二个循环结束时,事情显然已经偏离了轨道。

operator=
不应该返回
void
@chris问题是它绝对必须返回,这是我们需要使用的函数。您已经问了足够多的问题来了解a是什么。您要求我们做很多额外的工作来重现错误。@Beta我很抱歉,我将发布文章以便查看结果better@Beta,我希望这有助于清楚地显示错误。谢谢,这对我来说确实很清楚,我假设我的push和pop方法的编码不正确,我想不出还有什么事情会让你大发雷霆output@BreonThibodeaux:然后测试推送和弹出方法。在你尝试建立它们之前先测试它们。每个优秀的开发人员都知道这一点,但我还没有听说有教授教授这一点。如果您知道这些方法的实际功能,那么上面的输出是完全合乎逻辑的。
end of first while loop, t is 6 5 4 1 2 3
entering second while loop, u is 1 2 3 
end of second while loop, u is 3 2 1 4 5 6 1 2 3