queue.h
/*-----------------------------------------------
Created By EverSteins
Email:EverSteins@gmail.com
转载请注明出处
------------------------------------------------*/
#ifndef QUEUE_H
#define QUEUE_H
#include "utility.h"
typedef int ElemType;
class Queue
{
public:
Queue():count_(0),front_node_(NULL),rail_node_(NULL){}
~Queue();
size_t Size() const
{
return count_;
}
bool Empty() const
{
return count_ == 0;
}
void Push(const ElemType &item);
bool Pop();
bool Front(ElemType &item) const;
void ShowAll() const;
private:
sturct QueueItem
{
QueueItem(const ElemType &entry,QueueItem *next):entry_(entry),next_(next){}
ElemType entry_;
QueueItem *next_;
};
DISALLOW_COPY_AND_ASSIGN(Queue); //在utility.h中定义,为了禁用拷贝和赋值构造函数
size_t count_;
QueueItem *front_node_;
QueueItem *rail_node_;
};
#endif
queue.cpp
/*-----------------------------------------------
Created By EverSteins
Email:EverSteins@gmail.com
转载请注明出处
------------------------------------------------*/
#include "stdafx.h"
#include "utility.h"
#include "queue.h"
#include <iostream>
using namespace std;
void Queue::Push(const ElemType &item)
{
QueueItem *tmp_node=new QueueItem(item,NULL);
if (count_ == 0)
{
front_node_=rail_node_=tmp_node;
}
else
{
rail_node_->next_=tmp_node;
rail_node_=tmp_node;
}
count_++;
return;
}
bool Queue::Pop()
{
if (Empty())
return false;
QueueItem *tmp_node=front_node_;
front_node_=front_node_->next_;
delete tmp_node;
count_--;
return true;
}
bool Queue::Front(ElemType &item) const
{
if (Empty())
return false;
item=front_node_->entry_;
return true;
}
Queue::~Queue()
{
QueueItem *node=front_node_;
while (node != NULL)
{
QueueItem *tmp_node=node;
node = node->next_;
delete tmp_node;
}
}
void Queue::ShowAll() const
{
QueueItem *node=front_node_;
while (node != NULL)
{
cout<<node->entry_<<' ';
node = node->next_;
}
cout<<endl;
}
utility.h
/*-----------------------------------------------
Created By EverSteins
Email:EverSteins@gmail.com
转载请注明出处
------------------------------------------------*/
#ifndef UTILITY_H
#define UTILITY_H
#include <cstddef>
#include <cstdlib>
#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
TypeName(const TypeName&); \
void operator=(const TypeName&)
#endif
main.cpp
/*-----------------------------------------------
Created By EverSteins
Email:EverSteins@gmail.com
转载请注明出处
------------------------------------------------*/
#include "stdafx.h"
#include "utility.h"
#include "queue.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
Queue q1;
int tmp;
q1.Push(1);
q1.Push(2);
q1.Push(3);
while (!q1.Empty())
{
q1.Front(tmp);
cout<<tmp<<' ';
q1.Pop();
}
cout<<endl;
q1.Push(1);
q1.Pop();
q1.Pop();
q1.ShowAll();
cin.get();
return 0;
}