以下是我用c语言实现数据结构中的队列、

 
#pragma once 
 
#ifndef _ELEMTYPE_H 
#define _ELEMTYPE_H 
 
typedef int Elemtype;                     
                                             
#endif 
 
#ifndef _FUNCTIONPOINT_H 
#define _FUNCTIONPOINT_H 
 
typedef void(* Function)(Elemtype e); 
 
#endif 
 
 
#ifndef _STDLIB_H 
#define _STDLIB_H 
 
#include <stdlib.h> 
 
#endif 
 
 
#ifndef _QUEUE_H 
#define _QUEUE_H 
 
typedef struct Node 
{ 
    Elemtype Data; 
    struct Node * p_next; 
}Node,* QueuePtr; 
 
typedef struct 
{ 
    QueuePtr p_front;     
    QueuePtr p_rear;      
}Queue; 
 
#endif
 
#include "stdafx.h" 
 
bool InitQueue(Queue &Q); 
 
bool DestoryQueue(Queue &Q); 
 
bool ClearQueue(Queue &Q); 
 
bool QueueEmpty(const Queue &Q); 
 
int QueueLength(const Queue &Q); 
 
bool GetHead(const Queue &Q,Elemtype &e); 
 
bool EnterQueue(Queue &Q,Elemtype e); 
 
bool QuitQueue(Queue &Q,Elemtype &e); 
 
bool QueueTraverse(Queue &Q,Function CallBack);
 
 
#include "Queue.h" 
 
bool InitQueue(Queue &Q) 
{ 
    Q.p_front=(QueuePtr)malloc(sizeof(Node)); 
    if(Q.p_front==NULL) 
        return false; 
    Q.p_rear=Q.p_front; 
    Q.p_front->p_next=NULL; 
    return true; 
} 
 
 
bool DestoryQueue(Queue &Q) 
{ 
    while (Q.p_front->p_next!=NULL) 
    { 
        Q.p_rear=Q.p_front->p_next; 
        free(Q.p_front); 
        Q.p_front=Q.p_rear; 
    } 
    free(Q.p_front); 
    return true; 
} 
 
 
 
 
 
bool ClearQueue(Queue &Q) 
{ 
    if(Q.p_front==Q.p_rear) 
        return false; 
    else 
    { 
        QueuePtr temp=Q.p_front->p_next; 
        while(temp->p_next!=NULL) 
        { 
            Q.p_rear=temp->p_next; 
            free(temp); 
            temp=Q.p_rear; 
        } 
        free(temp); 
        Q.p_rear=Q.p_front; 
        return true; 
    } 
} 
 
 
bool QueueEmpty(const Queue &Q) 
{ 
    if(Q.p_front==Q.p_rear) 
        return true; 
    else 
        return false; 
} 
 
 
int QueueLength(const Queue &Q) 
{ 
    if(Q.p_front==Q.p_rear) 
        return 0; 
    else 
    { 
        int Length=1; 
        QueuePtr temp=Q.p_front->p_next; 
        while(temp->p_next!=NULL) 
        { 
            Length++; 
            temp=temp->p_next; 
        } 
        return Length; 
    } 
} 
 
 
bool GetHead(const Queue &Q,Elemtype &e) 
{ 
    if(Q.p_front==Q.p_rear) 
    { 
        e=NULL; 
        return false; 
    } 
    else 
    { 
        e=Q.p_front->p_next->Data; 
        return true; 
    } 
} 
 
 
bool EnterQueue(Queue &Q,Elemtype e) 
{ 
    QueuePtr temp=(QueuePtr)malloc(sizeof(Node)); 
    temp->Data=e; 
    Q.p_rear->p_next=temp; 
    temp->p_next=NULL; 
    Q.p_rear=temp; 
    return true; 
} 
 
 
bool QuitQueue(Queue &Q,Elemtype &e) 
{ 
    if(Q.p_front==Q.p_rear) 
    { 
        e=NULL; 
        return false; 
    } 
    else 
    { 
        QueuePtr temp=Q.p_front->p_next; 
        e=temp->Data; 
        Q.p_front->p_next=temp->p_next; 
        if(temp==Q.p_rear) 
            Q.p_rear=Q.p_front; 
        free(temp); 
        return true; 
    } 
} 
 
 
bool QueueTraverse(Queue &Q,Function CallBack) 
{ 
    if(Q.p_front==Q.p_rear) 
        return false; 
    else 
    { 
        QueuePtr temp=Q.p_front->p_next; 
        if(temp==Q.p_rear) 
        { 
            CallBack(temp->Data); 
            return true; 
        } 
        else 
        { 
            while(temp->p_next!=NULL) 
            { 
                CallBack(temp->Data); 
                temp=temp->p_next; 
            } 
            CallBack(temp->Data); 
            return true; 
        } 
    } 
}