C++ 链队列的实现

来源:互联网 发布:linux移植步骤 编辑:程序博客网 时间:2024/06/06 20:00

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 emptyT front(); //return data of the first node T get(int i);//return data of num i nodevoid push(const T &x); //add x to the tail of queueT pop(); //return and delete the first node in the queuebool clear(); //delete all nodes in queueprivate: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;}


原创粉丝点击