我的字符串队列结构有什么问题?

时间:2019-03-12 04:46:00

标签: c++ struct queue

我无法使其正常工作,我正在尝试为字符串队列创建头文件,该文件具有pop函数,该函数返回并摆脱队列中的第一个值,而push则将值插入到最后,用isEmpty检查队列是否为空。

#ifndef Queue_h
#define Queue_h
#include <string>

struct Node {
    string data;
    Node* next;

    Node() {
        data = "";
        next = NULL;
    }

};

struct Queue {
    Node* first;
    Node* last;

    Queue() {
        first = NULL;
        last = NULL;
    }

    ~Queue() {
        Node* temp = first;

        while (temp != NULL) {
            temp = temp->next;
            delete first;
            first = temp;
        }
    }
    void push(string input) {
        if (isEmpty()) {
            Node* node = new Node();
            first = node;
            last = node;
            last->data = input;
        }
        else {
            Node* node2 = new Node();
            last->next = node2;
            last = last->next;
            last->data = input;
        }
    }

    string pop() {
        if (!isEmpty()) {
            string temp = first->data;
            Node* tpointer = first;
            first = first->next;
            delete tpointer;
            return temp;
        }
        return "";
    }

    bool isEmpty() {
        if (first == NULL) {
            return true;
        }
        else {
            return false;
        }
    }
};

#endif

我遇到很多错误,例如“数据不是Node的成员”,“数据是未声明的标识符”,“数据是未知的覆盖说明符”之类的东西。我会复制/粘贴错误列表,但是我不知道如何轻松地做到这一点。

编辑:现在,在修正了字符串声明之后,我的错误降至4:pop不是队列第17行的成员,pop未知重写说明符第50行,语法错误(第50行,{第50行

1 个答案:

答案 0 :(得分:2)

  1. 确保使用#include <string>
  2. 使用string data;代替std::string data;
  3. 在所有其他地方也使用std::string代替string

我最初在上面的前两个项目中发表了评论,但我注意到pop()函数中的错误。我以为我也将它们添加到此答案中。

last弹出最后一项时,您没有正确更新Queue

std::string pop() {
    if (!isEmpty()) {
        std::string temp = first->data;
        Node* tpointer = first;
        if ( first == last )
        {
           first = last = NULL;
        }
        else
        {
           first = first->next;
        }
        delete tpointer;
        return temp;
    }
    return "";
}