队列的基本操作(c语言版)
#include
#include
typedef int elemType;
struct QueuePtr{
elemType data;
struct QueuePtr *next;
};
struct LinkQueue{
struct QueuePtr *front;
struct QueuePtr *rear;
};
void initQueue(struct LinkQueue *Q)
/*第一个操作构造一个空队列q*/
{
Q->front = Q->rear = NULL;
/* 把队首和队尾指针置空 */
return;
}
void push(struct LinkQueue *Q, elemType x)
/*第二个操作插入元素e为q的新的队尾元素 */
{
/* 得到一个由newP指针所指向的新结点 */
struct QueuePtr *newP;
newP = (struct QueuePtr*)malloc(sizeof(struct QueuePtr));
if(newP == NULL){
printf("内存空间分配失败! ");
exit(1);
}
/* 把x的值赋给新结点的值域,把新结点的指针域置空 */
newP->data = x;
newP->next = NULL;
/* 若链队为空,则新结点即是队首结点又是队尾结点 */
if(Q->rear == NULL){
Q->front = Q->rear = newP;
}
else{
/* 若链队非空,则依次修改队尾结点的指针域和队尾指针,使之指向新的队尾结点 */
Q->rear = Q->rear->next = newP;
/*可以分两句话来写*/
}
}
elemType pop(struct LinkQueue *Q)
/*第三个操作队列不为空,则删除q的队头元素,用e返回其值,并返回ok; */
{
struct QueuePtr *p;
elemType temp;
/* 若链队为空则停止运行 */
if(Q->front == NULL){
printf("队列为空,无法删除! ");
exit(1);
}
temp = Q->front->data;
/* 暂存队尾元素以便返回 */
p = Q->front;