链队列的C++实现

2014-11-24 12:36:41 · 作者: · 浏览: 0
#include
  
   
using namespace std;
//节点类
template
   
     struct QNode { T data; QNode *next; }; //队列类 template
    
      struct LinkList { QNode
     
       * front; QNode
      
        * rear; size_t size; }; //构造一个空队列 template
       
         void InitQueue(LinkList
        
          & que) { que.front = (QNode
         
           *)malloc(sizeof(QNode
          
           )); if(!que.front) exit(0); que.size = 0; que.rear = que.front; que.rear->next = 0; } //销毁队列 template
           
             void DestroyQueue(LinkList
            
             & que) { QNode
             
               * p = que.front->next; free(que.front); while(p != 0) { que.front = p->next; free(p); p = que.front; } } //清空队列 template
              
                void ClearQueue(LinkList
               
                & que) { QNode
                
                  * p = que.front->next; while(p != 0) { que.rear = p->next; free(p); p = que.rear; } que.rear = que.front; que.front->next = 0; que.size = 0; } //返回队列的长度 template
                 
                   int QueueLength(LinkList
                  
                   & que) { return que.size; } //返回队列的队首元素 template
                   
                     T GetHead(LinkList
                    
                     & que) { return que.front->next->data; } //元素入队 template
                     
                       void EnQueue(LinkList
                      
                       & que,T t) { QNode
                       
                         *p = (QNode
                        
                         *)malloc(sizeof(QNode
                         
                          )); if(!p) exit(0); p->data = t; p->next = 0; que.rear->next = p; que.rear = p; que.size++; } //元素出队 template
                          
                            bool DeQueue(LinkList
                           
                            & que,T & t) { if(que.size==0) return false; QNode
                            
                              *p = que.front->next; que.front->next = p->next; que.size--; t = p->data; free(p); return true; } //从对头到队尾元素遍历调用visit函数 template
                             
                               void VisitQueue(LinkList
                              
                               & que,void (*visit)(T &t)) { QNode
                               
                                 *p = que.front->next; while(p != 0) { (*visit)(p->data); p = p->next; } } //测试函数 template
                                
void Print(T &t) { cout< void AddOne(T &t) { t++; } int main() { //创建一个空的队列 LinkList queue; //初始化队列 InitQueue(queue); //元素入队 EnQueue(queue,1); EnQueue(queue,2); EnQueue(queue,3); EnQueue(queue,4); //返回队列的长度 cout<<"队列的长度: "< ); //返回队列的队首元素 cout<<"队列的队首元素: "< ); //元素出队 if(DeQueue(queue,a)) { cout<<"出队元素: "< ); //将所有元素加一 cout<<"将所有元素加一"< ); //输出所有元素 VisitQueue(queue,Print ); //清空队列 ClearQueue(queue); //销毁队列 DestroyQueue(queue); }