循环队列-链表实现

#include
#include
 
typedef struct QNode
{
    int data;
    struct QNode *next;
}QNode,*QueuePtr;
 
typedef struct
{
    QueuePtr front;
    QueuePtr rear;
}LinkQueue; //首位指针
 
//构造一个空队列
int InitQueue(LinkQueue *Q)
{
    Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));
    if(!Q->front)
        return 0;
    Q->front->next=NULL;
    return 1;
}
 
//销毁队列
int DestoryQueue(LinkQueue *Q)
{
    while(Q->front)
    {
        Q->rear=Q->front->next;
        free(Q->front);
        Q->front=Q->rear;
    }
    return 1;
}
 
 
//插入元素e为队列的新队尾元素
int EnQueue(LinkQueue *Q,int e)
{
    QueuePtr p;
    p=(QueuePtr)malloc(sizeof(QNode));
    p->data=e;
    p->next=NULL;
    Q->rear->next=p;
    Q->rear=p;
    return 1;
}
 
//
int DeQueue(LinkQueue *Q,int *e)
{
    QueuePtr p;
    if(Q->front == Q->rear)
        return 0;
    p=Q->front->next;
    *e=p->data;
    Q->front->next=p->next;
    if(Q->rear == p)
        Q->rear=Q->front;
    free(p);
    return 1;
}
 
int PrintQueue(QNode *Q)
{
    LinkQueue p;
    p.front = Q;
    while(p.front != p.rear)
    {
        printf("%d\n",Q->data);
        Q = Q->next;
    }
 
}
void QueueTraverse(LinkQueue Q)
 {
    QueuePtr p=Q.front->next;
    while(p)
    {
        printf("%d\n",p->data);
        p=p->next;
    }
    printf("\n");
 }
int main()
{
    int a[100],i;
    LinkQueue Q;
    InitQueue(&Q);
    for(i=0;i<100;i++)
        EnQueue(&Q,i);
    QueueTraverse(Q);
    DeQueue(&Q,&i);
    DeQueue(&Q,&i);
    QueueTraverse(Q);
 
}
 

你可能感兴趣的:(数据结构)