Java代码假设以带头结点的循环链表表示一个队列,并且只设一个队尾指针指向尾元素结点(注意不设头指针),试写出相应的置空队、入队、出队的算法
时间: 2024-04-30 12:09:07 浏览: 81
置空队算法:
void EmptyQueue(node &rear){
rear = NULL; //把队尾指针置为NULL即可
}
入队算法:
void EnQueue(node &rear, int val){
node p; //定义一个新结点
p = (node)malloc(sizeof(struct linknode)); //为新结点分配内存空间
p->data = val; //给新结点赋值
if(rear == NULL){ //队列为空时
rear = p; //新结点成为队尾
rear->next = rear; //队尾的next指针指向自己
}
else{ //队列已有元素时
p->next = rear->next; //新结点的next指针指向队头
rear->next = p; //队尾的next指针指向新结点
rear = p; //新结点成为队尾
}
}
出队算法:
int DeQueue(node &rear){
int val;
node p; //定义临时结点
if(rear == NULL){ //当队列为空时
return -1; //返回-1表示队列为空
}
if(rear->next == rear){ //当队列只有一个元素时
val = rear->data; //取出元素的值
free(rear); //释放该结点的空间
rear = NULL; //队尾指针置空
}
else{ //当队列有多个元素时
p = rear->next; //记录队头结点
val = p->data; //取出队头结点元素的值
rear->next = p->next; //队尾的next指针指向队头的下一个结点
free(p); //释放队头结点的空间
}
return val; //返回取出的元素的值
}
阅读全文