队列的相关操作

来源:互联网 发布:普通话纠正软件 编辑:程序博客网 时间:2024/05/22 01:58

队列的创建

Status InitQueue(LinkQueue &Q){    if(!(Q.front = Q.rear = (QueuePtr)malloc(QNode)))        exit(OVERFLOW);    Q.front->next = NULL;    return OK;}

队列的销毁

Status DestroyQueue(LinkQueue &Q){    while(Q.front)    {        Q.rear = Q.front->next;        free(Q.front)        Q.front = Q.rear;        return OK;    } }

清空队列

Status ClearQueue(LinkQueue &Q){    QueuePtr p,q;    Q.rear = Q.front;    p = Q.front->next;    while(p)    {        q = p;        free(p);        p = q->next;    }    return OK;}

判断队列是否为空

Status QueueEmpty(LinkQueue Q){    if(Q.front == Q.rear)        return TRUE;    else        return FALSE;}

计算队列的长度

Status QueueLength(LingkQueue Q){    int i;    QueuePtr p;    p = Q.front;    while(p!=Q.rear)    {        i++;        p = p->next;    }    return i;}

队头元素的获取

Status GetHead(LinkQueue Q,QElemType &e){    QueuePtr p;    if(Q.front == Q.rear)        return ERROR;    p = Q.front->next;     // Q.front->data 为空     e = p->data;    return OK;}

队尾的插入

Status EnQueue(LinkQueue &Q,QElemType e){    QueuePtr p;    if(!(p=(QueuePtr)malloc(sizeof(QNode))))        exit(OVERFLOW);    p->data = e;    Q.rear->next = p;    Q.rear = q;    Q.rear->next = NULL: }

队头的删除

Status DeQueue(LinkQueue &Q,QElemType &e){    QueuePtr p;    if(Q.front == Q.rear)        return ERROR;    p = Q.front->next;    e = p->data;    Q.front->next->next = p->next;    if(p==Q.rear)        Q.rear = Q.front;    free(p);    return OK;}
0 0
原创粉丝点击