-1

我试图弄清楚如何计算堆栈中的重复值。

我到目前为止的代码如下。我不知道如何存储已记录一次、两次或 100 次的值。假设我有一堆 (1, 1, 1, 4, 5, 3) 并且我想计算 1 出现的次数。每次在堆栈中计数 1 时,我如何存储?

template <class Object>
int Stack<Object>::count( const Object & data ) const{
  StackNode<Object> * node = topNode;
  int n = 0;
  while (node != NULL) {
    if (data == node->getElement())
      n++;
    node = node->getNext();
  }
  return n;
}

编辑: 我更新了一个修改过的代码,仍然不太正确,但更接近

4

2 回答 2

2

我会:

  1. 创建一个映射,其中键是您希望在堆栈中找到的值,映射的值是一个计数器
  2. 在堆栈中的每个条目上,查看上面的地图并增加计数器。

编辑:我看到你想要做的是有点不同,而不是返回堆栈中每个值的计数,你想要返回特定传入值的计数(?)

然后你几乎做对了,除了通常你不能以正常方式迭代堆栈的内容。所以你需要做的是..

  1. 从主堆栈中弹出一个项目
  2. 如果与传入的值相同,则count
  3. 将此项目推入临时堆栈
  4. 一旦堆栈为空,将临时堆栈中的所有项目弹出回主堆栈。

这意味着您不需要地图,但这确实意味着您必须传入要计算其实例的值。

注意:此方法不能是const因为您需要调用堆栈类的pop()push()方法。

于 2013-10-22T10:26:38.620 回答
0

这最终起作用了

template <class Object>
int Stack<Object>::count( const Object & data ) const{
        StackNode<Object> * node = topNode;
    int n = 0;
        while (node != NULL) {
            if (data == node->getElement())
                n++;
            node = node->getNext();
        }
      return (n);
}
于 2013-10-22T11:13:18.887 回答