Здраствуйте, есть класс очереди на основе односвязного списка, в случае, если find возвращает false или использования swap почему-то не выводятся элементы, подозреваю что проблема в указателях, но не уверен как вернуть их к начальному состоянию. Также, нужно написать метод for_each, но я слабо представляю как он должен быть реализован.
У меня завтра сдача курсовой, помогите пожалуйста.
#include "stdafx.h"
#include <iostream>
using namespace std;
template<class T>
class Queue
{
struct node
{
T data;
node* next;
};
private:
node* ptr;
public:
Queue() : ptr(NULL) {}
~Queue()
{
this->clear();
}
public:
int size()
{
int sz = 0;
const node* iter = ptr->next;
do
{
sz++;
iter = iter->next;
} while (iter != ptr->next);
return sz;
}
bool empty()
{
return (!ptr);
}
T& front()
{
return ptr->next->data;
}
T& back()
{
node* tmp = ptr;
while (!tmp->next)
{
tmp = tmp->next;
}
return tmp->data;
}
void swap(Queue<T> q)
{
while (this->ptr->next && q.ptr->next)
{
T tmp = this->ptr->data;
this->ptr->data = q.ptr->data;
q.ptr->data = tmp;
this->ptr = this->ptr->next;
q.ptr = q.ptr->next;
}
}
void push(T data)
{
node* e = new node();
e->data = data;
if (!ptr)
{
ptr = e;
ptr->next = ptr;
}
else
{
e->next = ptr->next;
ptr = ptr->next = e;
}
}
void pop() {
if (ptr == ptr->next)
{
delete ptr;
ptr = NULL;
return;
}
node* tmp = ptr->next;
ptr->next = tmp->next;
delete tmp;
tmp = NULL;
}
bool find(T data)
{
node* tmp = ptr;
while (tmp->next)
{
if (data == tmp->data)
{
return true;
}
tmp = tmp->next;
}
return false;
}
void clear()
{
while (!this->empty())
this->pop();
}
};
void main()
{
Queue<int> q, w;
for (int i = 1; i <= 6; i++)
{
q.push(i * 100);
w.push(i);
}
cout << "Queue size: " << q.size() << endl;
cout << q.back() << endl;
if (q.find(200))
{
cout << "True" << endl;
}
else
{
cout << "False" << endl;
}
q.swap(w);
while (!q.empty()) {
cout << q.front() << endl;
q.pop();
}
if (q.empty())
cout << "queue NULL" << endl;
cin.get();
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Ищет в контейнере элементы, эквивалентные val, и возвращает количество совпадений
Как реализовать правильно функцию удаления вершины? Если возможно помогите кодом
Пару часов назад писал с вопросом о явном подключении и с горем пополам разобрался, спасибо всем, кто помогСейчас встал вопрос о неявном подключении...