C++ 链队列的实现!定义qnode时候,模板和typedef不能同时使用
//IQueue.h
#pragma once
#include <iostream>
using namespace std;
template<typename T>
struct qnode //typedef和模板不能一起用
{
T data;
struct qnode *next;
} ;
template<typename T>
class IQueue
{
public:
IQueue(void);
~IQueue(void);
public:
bool isEmpty(); //return true id the queue is empty
T front(); //return data of the first node
T get(int i);//return data of num i node
void push(const T &x); //add x to the tail of queue
T pop(); //return and delete the first node in the queue
bool clear(); //delete all nodes in queue
private:
qnode<T> *head;
qnode<T> *tail;
};
template<typename T>
IQueue<T>::IQueue()
{
qnode<T> *tmp = new qnode<T>;
tmp->data = NULL;
tmp->next = NULL;
head = tmp;
tail = tmp;
}
template<typename T>
IQueue<T>::~IQueue()
{
delete head;
delete tail;
}
template<typename T>
bool IQueue<T>::isEmpty()
{
return head==tail;
}
template<typename T>
T IQueue<T>::front()
{
if(isEmpty())
return NULL;
return head->next->data;
}
template<typename T>
T IQueue<T>::get(int i)
{
int num = 0;
qnode<T> *p;
p = head;
while(p->next!=NULL&&num!=i)
{
p=p->next;
num++;
}
if(p->next==NULL&&num!=i)
return NULL;
if(num!=i)
return NULL;
return p->data;
}
template<typename T>
void IQueue<T>::push(const T &x)
{
qnode<T> *tmp = new qnode<T>;
tmp->data = key;
tmp->next = NULL;
tail->next = tmp;
tail = tmp;
}
template<typename T>
T IQueue<T>::pop()
{
if(isEmpty())
return NULL;
qnode<T> *p = head;
head = head->next;
delete p;
}
template<typename T>
bool IQueue<T>::clear()
{
if(isEmpty())
return true;
qnode<T> *p;
p = head;
while(p->next!=NULL)
{
head->next = p->next;
delete p;
p = head;
}
tail = head;
return true;
}