计算堆栈中的重复值

时间:2013-10-22 10:24:00

标签: c++ stack

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

我到目前为止的代码如下。我无法弄清楚如何存储一次,两次或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;
}

修改 我已更新了更改后的代码,但仍然不太正确,但更接近

2 个答案:

答案 0 :(得分:2)

我会:

  1. 创建一个地图,其中键是您希望在堆栈中找到的值,并且映射的值是计数器
  2. 在堆栈中的每个条目上,查看上面的地图并递增计数器。
  3. 编辑:我看到你要做的事情有点不同,而不是返回堆栈中每个值的计数,你想要返回一个特定传入值的计数(?)

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

    1. 从主堆栈中弹出一个项目
    2. 如果值与传入的值相同,则计算
    3. 将此项目推入临时堆栈
    4. 一旦堆栈为空,将所有项目从临时堆栈弹回主堆栈。
    5. 这意味着您不需要地图,但它确实意味着您必须传入您想要计算实例的值。

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

答案 1 :(得分: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);
}