C++/Data Structure/Queue
Содержание
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;
}