создание динамической очереди в C ++

0

Я пытаюсь сделать динамическую очередь в C++, и я написал большую часть кода, но он не работает, может ли кто-то быть достаточно любезен, чтобы просмотреть его и сказать мне, что случилось? :) Также прокомментируйте стиль кодирования, который я хочу улучшить.

Я написал основную функцию для тестирования программы, и это должен быть ожидаемый результат:

data1 = 1

data1 = 1 data2 = 2

1 2 3 4 5 6

Del: 1 Del: 2 Del: 3

Это мой код:

#include <iostream>
template<typename T>
class Queue
{
    struct Node
    {
        T data;
        Node* next;
    };
    Node* head;
    Node* tail;
    int qsize;

public:
    Queue()
    {
        head = NULL;
        tail = NULL;
        qsize = 0;
    }

    bool empty()
    {
        if(qsize = 0){return true;}
        else         {return false;}
    }

    void put(const T& data)
    {    
        Node *newNode = new Node;
        if(qsize)
        {
            tail->next = newNode;
            newNode->data = data;
            newNode->next = NULL;
            tail = newNode;
        }
        else
        {
            head = tail = newNode;
            newNode->data = data;
            newNode->next = NULL;
        }
        qsize++;
    }

    T get()
    {
        T val;
        Node *temp;

        if(empty())
        {
            std::cout << "queue is empty" << std::endl;
        }
        else
        {
            val = head->data;
            temp = head;
            head = head->next;
            delete temp;

            qsize--;
            return val;
        }
    }

    void destroyQueue()
    {
        while(!empty())
        {
            std::cout<<"DEL:";
            get();
        }
    }

    ~Queue()
    {
        destroyQueue();
    }
};



int main()
{
    int data1,data2;
    Queue<int>* q = new Queue<int>();
    q->put(1);
    data1 = q->get();
    std::cout << " data1=" << data1 << std::endl;
    q->put(1);
    q->put(2);
    data1 = q->get();
    data2 = q->get();
    std::cout << " data1=" << data1
              << " data2=" << data2 << std::endl;
    q->put(1);
    q->put(2);
    q->put(3);
    q->put(4);
    q->put(5);
    q->put(6);
    while (!q->empty()) std::cout << " " << q->get();
    std::cout << std::endl;
    q->put(1);
    q->put(2);
    q->put(3);
    delete q;
}
  • 3
    Основные предупреждения компилятора должны указывать на ошибку.
  • 1
    Первое, что я заметил, это неправильный оператор равенства в bool empty (). если (qsize == 0)
Показать ещё 1 комментарий
Теги:
queue

1 ответ

1

if(qsize = 0) должно быть, if(qsize == 0) - не присваивать, сравнивать!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню