Недавно я пришел в очередь данных struture. Чтобы научиться чему-то новому, я решил реализовать его без библиотеки STL. Дело в том, что мне довольно сложно определить разницу между типичным массивом и очередью.Очередь, реализованная с помощью классов
я определил простой класс
class Queue{
public:
Queue();
Queue(int);
void enqueue(int);
int dequeue();
int first_out() ;
int last_out() ;
bool isEmpty();
bool isFull();
private:
int current;
int maxi;
int *arr;
int frontt;
int rear;
};
его конструктор
Queue::Queue(int maxo){
this -> current = 0;
this -> maxi = maxo;
this -> arr = new int[maxi];
this -> frontt = 0;
this -> rear = 0;
}
метод Епдиеие, который перераспределять массив внутри, когда он пытается получить доступ к индексу, который больше максимального показателя.
void Queue::enqueue(int a){
if(this -> rear == this -> maxi){
int *temp;
int tmp = maxi;
while(this -> rear >= this -> maxi){
this -> maxi *= 2;
}
temp = new int[maxi];
for(int i = 0; i < tmp ; i++){
temp[i]=arr[i];
}
rear = maxi;
delete[] arr;
arr = temp;
}
this -> arr[rear++] = a;
}
Dequeue, который увеличивает передний индекс.
int Queue::dequeue(){
return arr[frontt++];
}
int Queue::first_out(){
return arr[frontt];
}
int Queue::last_out(){
return arr[rear-1];
}
bool Queue::isEmpty(){
if(this -> frontt == this -> rear){
cout << "Queue is empty" << endl;
return 1;
}
return 0;
}
bool Queue::isFull(){
if(this -> frontt == (this -> rear+1) % this -> maxi){
return 1;
}
return 0;
}
Основная функция, чтобы проверить это
Queue tst(5);
cout << "Write numbers" << endl;
int n;
while(cin >> n){
tst.enqueue(n);
}
tst.dequeue();
cout << "The firt out element is " << tst.first_out() << endl;
cout << "The last out element is " << tst.last_out() << endl;
return 0;
Мой вопрос довольно тривиально. Это как реализовать очередь? Могу ли я понять это, поскольку очередь - это просто генератор/итератор значений? Зачем использовать очередь вместо массива? И какова точка очереди круга?
Спасибо за ответы.
Почему бы вам не взглянуть на реализацию стандартной библиотеки C++ и не сравнить с вашими? –