队列的实现

#include<stdlib.h>

#include<string.h>

#include<stdio.h>



typedef int Item;

typedef struct node* PNode;

typedef struct node

{

    Item data;

    PNode next;

}Node;



typedef struct

{

    PNode front;

    PNode rear;

    int size;

}Queue;



int GetSize(Queue *pqueue)

{

    return pqueue->size;

}



bool IsEmpty(Queue *pqueue)

{

    if(pqueue->front==NULL && pqueue->rear==NULL &&pqueue->size==0)

        return true;

    return false;

}



void DestroyQueue(Queue *pqueue)

{

    PNode pnode;

    while(!IsEmpty(pqueue))

    {

        pnode=pqueue->front;

        pqueue->front=pnode->next;

        free(pnode);

        pqueue->size--;

    }

}



Queue *InitQueue()

{

    Queue *pqueue=(Queue*)malloc(sizeof(Queue));

    if(pqueue!=NULL)

    {

        pqueue->front=NULL;

        pqueue->rear=NULL;

        pqueue->size=0;

    }

    return pqueue;

}



PNode DeQueue(Queue *pqueue,Item *pitem)//队头出队列

{

    PNode pnode = pqueue->front;

    if(!IsEmpty(pqueue))

    {

        *pitem=pnode->data;

        pqueue->front=pnode->next;

        pqueue->size--;

        free(pnode);

        if(pqueue->size==0)

             pqueue->rear=NULL;

    }

    return pqueue->front;

}



PNode EnQUeue(Queue *pqueue,Item item)//队尾加元素

{

    PNode pnode=(PNode)malloc(sizeof(Node));

    pnode->data=item;

    pnode->next=NULL;

    if(IsEmpty(pqueue))

    {

        pqueue->front=pnode;

    }

    else

    {

        pqueue->rear->next=pnode;

    }

    pqueue->rear = pnode;

    pqueue->size++;

    return pnode;

}





int main()

{

    Queue *pq=InitQueue();

    for(int i=0;i<10;i++)

    {

        EnQUeue(pq,i);

    }

    for(int i=0;i<10;i++)

    {

        Item item;

        DeQueue(pq,&item);

        printf("%d\n",item);

    }

    DestroyQueue(pq);

}

  

你可能感兴趣的:(队列)