C++でキューを実現するプログラムコード
4026 ワード
C++実装キュー、不足点があれば指摘してください
// MyQueue.cpp : 。
// (queue), 。 (pop)、 (push)、
// (front_element)、 (back_element)、 (size)、
// (empty)。
#include "stdafx.h"
#include
using namespace std;
//
template
struct NODE
{
NODE* next;
T data;
};
template
class MyQueue
{
public:
MyQueue()
{
NODE* p = new NODE;
if (NULL == p)
{
cout << "Failed to malloc the node." << endl;
}
p->data = NULL;
p->next = NULL;
front = p;
rear = p;
}
//
void push(T e)
{
NODE* p = new NODE;
if (NULL == p)
{
cout << "Failed to malloc the node." << endl;
}
p->data = e;
p->next = NULL;
rear->next = p;
rear = p;
}
//
T pop()
{
T e;
if (front == rear)
{
cout << "The queue is empty." << endl;
return NULL;
}
else
{
NODE* p = front->next;
front->next = p->next;
e = p->data;
// , ,rear node
//
if (rear == p)
{
rear = front;
}
delete p; p = NULL;
return e;
}
}
//
T front_element()
{
if (front == rear)
{
cout << "The queue is empty." << endl;
return NULL;
}
else
{
NODE* p = front->next;
return p->data;
}
}
T back_element()
{
if (front == rear)
{
cout << "The queue is empty." << endl;
return NULL;
}
else
{
return rear->data;
}
}
//
int size()
{
int count(0);
NODE* p = front;
while (p != rear)
{
p = p->next;
count++;
}
return count;
}
//
bool empty()
{
if (front == rear)
{
return true;
}
else
{
return false;
}
}
private:
NODE* front; // 。 front->next->data 。
NODE* rear;// ( )
};
int _tmain(int argc, _TCHAR* argv[])
{
MyQueue myqueue;
cout << myqueue.size() << endl;
myqueue.push(10);
myqueue.push(20);
myqueue.push(30);
cout << myqueue.front_element() << endl;
cout << myqueue.back_element() << endl;
myqueue.pop();
if (myqueue.empty())
{
cout << "The queue is empty now." << endl;
}
else
{
cout << "The queue has " << myqueue.size() << " elements now." << endl;
}
myqueue.pop();
myqueue.pop();
if (myqueue.empty())
{
cout << "The queue is empty now." << endl;
}
else
{
cout << "The queue has " << myqueue.size() << " elements now." << endl;
}
return 0;
}