VC++ 实现队列

在实现的时候是采用一模版类的方法,正常模版类实现是不要把接口和实现体分开,因为分开的话在包含的时候也是要包含.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;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值