[stack] [list]我无法理解我的错误

时间:2017-12-07 16:15:35

标签: c++ list stack

请帮助,我无法理解错误在哪里,编译后,程序没有任何显示。需要创建2个堆栈,其中一个将包含随机数,另一个将仅包含第一个堆栈中的那些数字,这大于第一个堆栈中所有数字的平均值

#include "stdafx.h"
#include <iostream>
#include <ctime>

using namespace std;

struct stack //our stack
{
    int num;
    stack* ptr = NULL;
};

void addtostack(int &n, stack* p) //add element to stack
{
    stack* newstack = new stack;
    newstack->num = n;
    newstack->ptr = p;
    p = newstack;
}

void showstack(stack* p) //show stack
{
    stack* current = p;
    while (current->ptr)
    {
        cout << current->num << endl;
        current = current->ptr;
    }
}

int main()
{
    srand(time(NULL));
    const int SIZE = 5;
    stack* first = new stack;
    int rnd;
    double average = 0;
    for (int i = 0; i < SIZE; i++)
    {
        rnd = -50 + rand() % 101;
        addtostack(rnd, first);
        average += rnd;
    }
    average /= SIZE;
    showstack(first);
    system("pause > nul");
}

1 个答案:

答案 0 :(得分:1)

该行

p = newstack;

没有做你希望它会做的事。

它会更改变量p的本地副本。 main中的指针仍指向用它初始化的唯一对象。

您可以通过以下两种方式解决问题:

  1. 通过引用传递p。您不需要通过引用传递n

    void addtostack(int n, stack*& p) //add element to stack
    {
        stack* newstack = new stack;
        newstack->num = n;
        newstack->ptr = p;
        p = newstack;
    }
    
  2. 将新指针返回给调用函数。

    stack* addtostack(int n, stack* p) //add element to stack
    {
        stack* newstack = new stack;
        newstack->num = n;
        newstack->ptr = p;
        return newstack;
    }
    

    然后将main更改为:

    for (int i = 0; i < SIZE; i++)
    {
        rnd = -50 + rand() % 101;
        first = addtostack(rnd, first);
        average += rnd;
    }