Я пытаюсь реализовать Структура данных очереди, используя связанный список в C ++, где я использовал классы как в связанном списке, так и в очереди. Одна вещь, которую я не получаю, это то, что, например, я написал метод front()
, который будет возвращать верхний элемент или первый элемент очереди. Тем не менее, я запутался в том, что я должен возвращать и как я должен возвращать в случае шаблонного класса, когда моя очередь пуста . Если бы это была очередь типа int
, я бы просто вернул -1
. Здесь я запутался, что я должен вернуть, если мой queue()
уже пуст и как мне вернуться из шаблонного класса .
Вот код, который я написал
// Implementation of Queue Data Structure using List
#include<iostream>
using namespace std;
template<typename T>
class Node
{
public:
T data;
Node<T>*next;
};
template<typename S>
class Queue
{
public:
Node<S>*q = NULL;
void enqueue(S data){
Node<S>* newNode = new Node<S>;
newNode->data = data;
newNode->next = NULL;
if(q!=NULL){
Node<S>* temp = q;
while(temp->next!=NULL){
temp = temp->next;
}
temp->next = newNode;
}
else{
q = newNode;
}
}
void print(){ //Utility method for printing the queue with ease
Node<S>*temp = q;
while(temp){
cout<<temp->data<<endl;
temp = temp->next;
}
}
auto dequeue() -> decltype(q->data){
Node<S>*temp = q;
q = q->next;
S value = temp->data;
delete temp;
return value;
}
auto front() -> decltype(q->data){
return q->data;
}
};
int main()
{
Queue<int>q;
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
cout<<"Front is "<<q.front()<<endl;
cout<<"Before dequeue() printing\n";
q.print();
cout<<"Dequeue operation() "<<q.dequeue()<<endl;
cout<<"After deueue() printing\n";
q.print();
return 0;
}