C++/Data Structure/Queue

Материал из C\C++ эксперт
Перейти к: навигация, поиск

Cycling through a queue.

#include <iostream>
#include <queue>
#include <string>
using namespace std;
int main()
{
  queue<string> queueObject;
  
  queueObject.push("one");
  queueObject.push("two");
  queueObject.push("three");
  cout << "Contents of queue: ";
  for(int i = 0; i < queueObject.size(); i++) {
    cout << queueObject.front() << " ";
    // remove front and push on back
    queueObject.push( queueObject.front() ); 
    queueObject.pop();
  }
  cout << endl;
  cout << "Now, remove elements:\n";
  while( !queueObject.empty() ) {
    cout << "Popping ";
    cout << queueObject.front() << endl;
    queueObject.pop();
  }
  return 0;
}


Define a queue

#include <iostream>
using namespace std;
#define SIZE 100
class QueueClass {
  int queue[SIZE];            // holds the queue
  int head, tail;             // indices of head and tail
public:
  void init();                // initialize
  void q(int num);            // store
  int deq();                  // retrieve
};
void QueueClass::init()
{
  head = tail = 0;
}
void QueueClass::q(int num)
{
  if(tail+1==head || (tail+1==SIZE && !head)) {
    cout << "Queue is full\n";
    return;
  }
  tail++;
  if(tail == SIZE) 
     tail = 0; // cycle around
  queue[tail] = num;
}
int QueueClass::deq()
{
  if(head == tail) {
    cout << "Queue is empty\n";
    return 0;  // or some other error indicator
  }
  head++;
  if(head==SIZE) head = 0; // cycle around
  return queue[head];
}
int main()
{
  QueueClass queue1, queue2;
  int i;
  queue1.init();
  queue2.init();
  for(i=1; i <=10; i++) {
    queue1.q(i);
    queue2.q(i*i);
  }
  for(i=1; i <=10; i++) {
    cout << "Dequeue 1: " << queue1.deq() << endl;
    cout << "Dequeue 2: " << queue2.deq() << endl;
  }
  return 0;
}


Define our own Queue class

#include <iostream>
using namespace std;
#define SIZE 100
class QueueClass {
  int queue[SIZE];           // holds the queue
  int head, tail;            // indices of head and tail
public:
  QueueClass();              // constructor
  void q(int num);           // store
  int deq();                 // retrieve
};
QueueClass::QueueClass()
{
  head = tail = 0;
}
void QueueClass::q(int num)
{
  if(tail+1==head || (tail+1==SIZE && !head)) {
    cout << "Queue is full\n";
    return;
  }
  tail++;
  if(tail==SIZE) tail = 0; // cycle around
  queue[tail] = num;
}
int QueueClass::deq()
{
  if(head == tail) {
    cout << "Queue is empty\n";
    return 0;  // or some other error indicator
  }
  head++;
  if(head==SIZE) head = 0; // cycle around
  return queue[head];
}
int main()
{
  QueueClass queue1, queue2;
  int i;
  for(i=1; i <=10; i++) {
    queue1.q(i);
    queue2.q(i*i);
  }
  for(i=1; i <=10; i++) {
    cout << "Dequeue 1: " << queue1.deq() << endl;
    cout << "Dequeue 2: " << queue2.deq() << endl;
  }
  return 0;
}


Demonstrate the queue class: push, front, empty and pop

#include <iostream>
#include <queue>
#include <string>
using namespace std;
int main()
{
  queue<string> queueObject;
  cout << "Pushing one two three four\n";
  queueObject.push("one");
  queueObject.push("two");
  queueObject.push("three");
  while(!queueObject.empty()) {
    cout << "Popping ";
    cout << queueObject.front() << endl;
    queueObject.pop();
  }
  return 0;
}


Queue: push and pop

#include <iostream>
#include <string>
#include <queue>
using namespace std;
int main()
{
    queue<string> queueObject;
    queueObject.push( "www." );
    queueObject.push( "java." );
    queueObject.push( "com" );
    while ( !queueObject.empty() ) {
        cout << queueObject.front() << " ";
        queueObject.pop();
     }
     return 0;
}


Your own Queue class

#include <iostream>
using namespace std;
#define SIZE 100
class QueueClass {
  int queue[SIZE]; 
  int head, tail; 
public:
  QueueClass(); 
  void q(int num); 
  int deq();  
};
QueueClass::QueueClass()
{
  head = tail = 0;
}
void QueueClass::q(int num)
{
  if(tail+1==head || (tail+1==SIZE && !head)) {
    cout << "Queue is full\n";
    return;
  }
  tail++;
  if(tail==SIZE) tail = 0; // cycle around
  queue[tail] = num;
}
int QueueClass::deq()
{
  if(head == tail) {
    cout << "Queue is empty\n";
    return 0;                    // or some other error indicator
  }
  head++;
  if(head==SIZE) head = 0;       // cycle around
  return queue[head];
}
int main()
{
  QueueClass queue1, queue2;
  int i;
  for(i=1; i <=10; i++) {
    queue1.q(i);
  }
  queue2 = queue1;
  for(i=1; i <=10; i++) 
    cout << "Dequeue 1: " << queue1.deq() << endl;
  for(i=1; i <=10; i++) 
    cout << "Dequeue 2: " << queue2.deq() << endl;
  return 0;
}