包数据结构的增量计数器

时间:2016-11-07 02:51:47

标签: c++

所以我创建了一个数据包数据结构,每次插入一个字符串的同一个实例时我都试图递增一个计数器,但由于某些原因,即使我输入了10个相同的字符串,我的计数器也不会增加。建议?

struct  BagNode
{
    string dataValue;
    int dataCount;
    BagNode * next;
};
class Bag{

private:
BagNode * head;

public:
Bag()
{
    head = NULL;
    //curr = NULL;
}
void insert(string v)
{
    if(head == NULL){ //empty list
        head = new BagNode;
        head->dataValue = v;
        head->next = NULL;

    }
    else
    {
            BagNode * n = new BagNode;      // new node
            n->dataValue = v;
            n->dataCount = 0;
            BagNode * current = head;           //for traversal
            //current = head;
            if(isSame(current->dataValue,v))
            {
                n->dataCount+= 1;
            }
            else
            {
                if(!isBefore(current->dataValue, v))        //new head
                {
                    n->next = head;
                    head = n;
                }
                else{           //mid and tail insert
                    while(current->next && isBefore(current->next->dataValue,v))
                    {
                        current = current->next;
                    }
                    n->next = current->next;
                    current->next = n;
                }   
            }
    }   
}
 bool isSame(string a, string b) 
 {
    transform(a.begin(), a.end(), a.begin(), ::tolower);
    transform(b.begin(), b.end(), b.begin(), ::tolower);

    if(a == b) {
        return true;
    }
    else {
        return false;
    }
}
void traverse()
{
    BagNode * current;
    current = head;
    while(current)
    {
        output << current->dataValue << " (" << current->dataCount << ")" << " ";
        current = current->next;
    }
    cout << endl;
}

1 个答案:

答案 0 :(得分:0)

您正在检查是否应该增加列表的第一个元素,否则您只需要遍历它以找出插入新节点的位置。请记住,您实际上从未检查过任何其他节点是否包含您应该查找的值。你只需要修复它。

正如Sam上面提到的,你仍然有内存泄漏。我还要补充一点,总是存储字符串的小写版本而不是每次都重新计算可能会更好。