基于C的链队列实现

#include 
#include 

#define True 1
#define False 0
/*定义结构体*/
typedef struct Node
{
    int data;
    struct Node *next;
}LinkQueueNode;
/*封装队头与队尾指针*/
typedef struct
{
    LinkQueueNode *front;
    LinkQueueNode *rear;
}LinkQueue;
/*链队列初始化*/
int InitQueue(LinkQueue *Q)
{
   /*将Q初始化为一个空的链队列*/
   Q->front = (LinkQueueNode *)malloc(sizeof(LinkQueueNode));
   if(Q->front != NULL)
   {
       Q->rear = Q->front;
       Q->front->next = NULL;//指向空
       return(True);
   }
   else
   {
       return False;//溢出
   }
}
/*链队列入队操作*/
int EnterQueue(LinkQueue *Q,int x)
{
    LinkQueueNode *NewNode;
    NewNode = (LinkQueueNode *)malloc(sizeof(LinkQueueNode));
    if(NewNode!=NULL)
    {
        NewNode->data = x;
        NewNode->next = NULL;
        Q->rear->next = NewNode;
        Q->rear = NewNode;
        return True;
    }
    else
        return False;
}
/*判断是否为空栈*/
int IsEmpty(LinkQueue *Q)
{
    if(Q->front==Q->rear)
        return True;
    else
        return False;
}
/*链队列出队操作*/
int DeleteQueue(LinkQueue *Q)
{
    LinkQueueNode *p;
    if(IsEmpty(Q)==True)
        return False;
    p=Q->front->next;
    Q->front->next = p->next;
    if(Q->rear==p)
        Q->rear = Q->front;
    free(p);
    return True;
}
/*读队列头数据*/
int GetHead(LinkQueue *Q)
{
    if(IsEmpty(Q)==True)
        return False;
    LinkQueueNode *p;
    int x;
    p = Q->front->next;
    x = p->data;
    return x;
}
/*读队列所有元素*/
int ReadQueue(LinkQueue *Q)
{
    if(IsEmpty(Q)==True)
        return False;
    LinkQueueNode *p;
    p = Q->front->next;
    while(p!=NULL)
    {
        printf("%d\n",p->data);
        p = p->next;
    }
}
int main()
{
    //int a;
    LinkQueue *Q = (LinkQueue *)malloc(sizeof(LinkQueue));
    InitQueue(Q);
    EnterQueue(Q,2);
    EnterQueue(Q,3);
    EnterQueue(Q,4);
    ReadQueue(Q);
    return 0;
}

你可能感兴趣的:(基于C的链队列实现)