在实现的时候是采用一模版类的方法,正常模版类实现是不要把接口和实现体分开,因为分开的话在包含的时候也是要包含.cpp的文档
首先创建一个实现接口文件.h
内容如下:
#ifndef MYQUEUE_H
#define MYQUEUE_H
#include <stdio.h>
#include <iostream>
#define QUEUE_NULL -1 // 队列为空的时候取值返回值
template <class T>
struct QUEUE_NODE
{
QUEUE_NODE<T>* next;
T data;
};
template <class T>
class MyQueue
{
private:
QUEUE_NODE<T>* front; // 指向头结点的指针,实际是第一值为front->next->data
QUEUE_NODE<T>* rear; // 指向尾结点的指针
public:
MyQueue(); // // 开始化结构体
void push(T e);
T pop(); //队头出队
int size(); // 取得队列个数
bool Empty(); 判断是不是空队列数
};
#endif;
接着创建接口对应实现体:
#include "stdafx.h"
#include "MyQueue.h"
#include <iostream>
using namespace std;
template <class T>
MyQueue<T>::MyQueue()
{
QUEUE_NODE<T>* p = new QUEUE_NODE<T>;
if(NULL == p)
{
cout << " Failed to malloc to node" << endl;
return;
}
p->next = NULL;
p->data = NULL;
front = p;
rear = p;
}
//队尾入队
template <class T>
void MyQueue<T>::push(T e)
{
QUEUE_NODE<T>* p = new QUEUE_NODE<T>;
if(NULL == p)
{
cout << " Failed to malloc to node" << endl;
return;
}
p->data = e;
p->next = NULL;//链式指针,没有下一个指针
rear->next = p;
rear = p;
}
//队头出队
template <class T>
T MyQueue<T>::pop()
{
T e;
if( front == rear) // 空队列,没有元素
{
return QUEUE_NULL ;
}
else
{
QUEUE_NODE<T>* p = front->next;
e = p->data;
front->next = p->next;
if(p == rear)//表示全部数据取出
{
front = rear;
}
delete p;//取得后就表示出队列了,要释放掉
p = NULL;
return e;
}
}
// 取得队列个数
template <class T>
int MyQueue<T>::size()
{
int count = 0;
if(front != rear)//一开始相等表示没有
{
QUEUE_NODE<T>* p = front;
do
{
count++;
p = p->next;
}while(p != rear);
}
return count;
}
template <class T>
bool MyQueue<T>::Empty()
{
if(front == rear) // 相等表示没有值,全部取出的时候有front = rear;
{
return true;
}
else
{
return false;
}
}
首先创建一个实现接口文件.h
内容如下:
#ifndef MYQUEUE_H
#define MYQUEUE_H
#include <stdio.h>
#include <iostream>
#define QUEUE_NULL -1 // 队列为空的时候取值返回值
template <class T>
struct QUEUE_NODE
{
QUEUE_NODE<T>* next;
T data;
};
template <class T>
class MyQueue
{
private:
QUEUE_NODE<T>* front; // 指向头结点的指针,实际是第一值为front->next->data
QUEUE_NODE<T>* rear; // 指向尾结点的指针
public:
MyQueue(); // // 开始化结构体
void push(T e);
T pop(); //队头出队
int size(); // 取得队列个数
bool Empty(); 判断是不是空队列数
};
#endif;
接着创建接口对应实现体:
#include "stdafx.h"
#include "MyQueue.h"
#include <iostream>
using namespace std;
template <class T>
MyQueue<T>::MyQueue()
{
QUEUE_NODE<T>* p = new QUEUE_NODE<T>;
if(NULL == p)
{
cout << " Failed to malloc to node" << endl;
return;
}
p->next = NULL;
p->data = NULL;
front = p;
rear = p;
}
//队尾入队
template <class T>
void MyQueue<T>::push(T e)
{
QUEUE_NODE<T>* p = new QUEUE_NODE<T>;
if(NULL == p)
{
cout << " Failed to malloc to node" << endl;
return;
}
p->data = e;
p->next = NULL;//链式指针,没有下一个指针
rear->next = p;
rear = p;
}
//队头出队
template <class T>
T MyQueue<T>::pop()
{
T e;
if( front == rear) // 空队列,没有元素
{
return QUEUE_NULL ;
}
else
{
QUEUE_NODE<T>* p = front->next;
e = p->data;
front->next = p->next;
if(p == rear)//表示全部数据取出
{
front = rear;
}
delete p;//取得后就表示出队列了,要释放掉
p = NULL;
return e;
}
}
// 取得队列个数
template <class T>
int MyQueue<T>::size()
{
int count = 0;
if(front != rear)//一开始相等表示没有
{
QUEUE_NODE<T>* p = front;
do
{
count++;
p = p->next;
}while(p != rear);
}
return count;
}
template <class T>
bool MyQueue<T>::Empty()
{
if(front == rear) // 相等表示没有值,全部取出的时候有front = rear;
{
return true;
}
else
{
return false;
}
}