一.入队列操作
入队列操作就是将一个QNode类型的元素从队列的尾部进入队列。每当将一个队列元素插入队列,队列的尾指针都要进行修改(队列元素只能从队列的尾部进入队列),队头的指针不发生改变。
EnQueue (LinkQueue *q , ElemType e) { QueuePtr p; p = (QueuePtr)malloc(sizeof(QNode)); if(!p = NULL) exit(0); p->data = e; //将数据e存放到队列结点的data域中 p->next = NULL; //指针域置NULL q->rear ->next = p; //从队尾插入结点 q->rear = p; //修改队尾指针 }
二.出队列操作
出队列操作是将队列中的元素从队列的头部移出。每当从队列中移出数据时,队头指针front不发生改变,但是头结点的next指针要发生改变。队尾指针rear只有在原队列中只包含一个元素(即队头就是队尾)的情况下才会改变,否则也不改变。
DeQueue(LinkQueue *q , ElemType *e) { //如果队列q不为空,删除q的队头元素,用e返回其值 if(q->front == q->rear) return; //队列为空,返回 p = q->front->next; //p指向队列的第一个元素 *e = p->data; //将队首元素的数据赋值给e返回 q->front->next = p->next; //删除头结点 if(q->rear == p) q->rear = q->front; //如果此时队列为空,则修改队尾指针 free(p); }