队列

一.队列的顺序存储结构及其基本运算的实现

1.顺序队中实现队列的基本运算

(1).初始化队列

void InitQueue(SqQueue *&q)
{
    q = (SqQueue *)malloc(sizeof(SqQueue));
    q->front = q->rear = -1;
}

(2).销毁队列

void DestroyQueue(SqQueue *&q)
{
    free(q);
}

(3).判空

bool QueueEmpty(SqQueue *q)
{
    return(q->front == q->rear);
}

(4).进队列

bool enQueue(SqQueue *&q,Elemtype e)
{
    if(q->rear == MaxSize-1)  //队满上溢出
        return false;
    q->rear++;  //队尾增1
    q->data[q->rear] = e;  //rear位置插入元素e
    return true;
}

(5).出队列

bool deQueue(SqQueue *&q,ElemType &e)
{
    if(q->front == q->rear)  //队空下溢出
        return false;
    q->front++;
    e = q->data[q->front];
    return true;
}

2.环形队中实现队列的基本运算

(1).初始化队列

void InitQueue(SqQueue *&q)
{
    q = (SqQueue *)malloc(sizeof(SqQueue));
    q->front = q->rear = 0;
}

(2).销毁队列

void DestroyQueue(SqQueue *&q)
{
    free(q);
}

(3).判空

bool QueueEmpty(SqQueue *q)
{
    return(q->front == q->rear);
}

(4).进队列

bool enQueue(SqQueue *&q,ElemType e)
{
    if((q->rear+1)%MaxSize == q->front)  //队满上溢出
        return false;
    q->rear = (q->rear+1)%MaxSize;
    q->data[q->rear] = e;
    return true;
}

(5).出队列

bool deQueue(SqQueue *&q,ElemType &e)
{
    if(q->front == q->rear)  //队空下溢出
        return false;
    q->front = (q->front+1)%MaxSize;
    e = q->data[q->front];
    return true;
}

 

二.队列的链式存储结构及其基本运算的实现

(1).初始化队列

void InitQueue(SqQueue *&q)
{
    q = (LinkQuNode *)malloc(sizeof(LinkQuNode));
    q->front = q->rear = NULL;
}

(2).销毁队列

void DestroyQueue(LinkQuNode *&q)
{
    DataNode *pre=q->front,*p;  //pre指向队首结点
    if(pre != NULL)
    {
        p = pre->next;
        while(p != NULL)
        {
            free(pre);
            pre = p;
            p = p->next;
        }
        free(pre);
    }
    free(q);
}

(3).判空

bool QueueEmpty(LinkQuNode *q)
{
    return(q->rear == NULL);
}

(4).进队列

void enQueue(LinkQuNode *&q,ElemType e)
{
    DataNode *p;
    p = (DataNode *)malloc(sizeof(DataNode));
    p->data = e;
    p->next = NULL;
    if(q->rear == NULL)  //若链队为空,则新结点既是队首结点又是队尾结点
        q->front = q->rear = p;
    else
    {
        q->rear->next = p;
        q->rear = p;
    }
}

(5).出队列

bool deQueue(LinkQuNode *&q,ElemType &e)
{
    DataNode *t;
    if(q->rear == NULL)  //原来队列为空
        return false;
    t = q->front;  //t指向首结点
    if(q->front == q->rear)  //原来队列中只有一个数据结点时
        q->front = q->rear = NULL;
    else
        q->front = q->front->next;
    e = t->data;
    free(t);
    return true;
}

 

posted on 2019-06-04 00:52  elcalor  阅读(153)  评论(0编辑  收藏  举报

导航