java假设以带头结点的循环链表表示一个队列,并且只设一个队尾指针指向尾元素结点(注意不设头指针),试写出相应的置空队、入队、出队的算法。
时间: 2023-06-04 13:06:10 浏览: 79
以下是针对该问题的算法:
1. 置空队:将队尾指针指向 NULL 即可。
2. 入队:先创建新结点,将要插入的结点值存入新结点,再将新结点插入到队列尾部。
具体步骤如下:
1. 创建新结点:CreateNode(&s)。
2. 存入结点值:s->data = x。
3. 判断队列是否为空:
1) 若为空,将队尾指针指向新结点,即 rear = s。
2) 若不为空,将新结点插入到队列尾部:s->next = rear->next; rear->next = s;
4. 修改队尾指针:rear = s。
3. 出队:先判断队列是否为空,然后将要出队的结点从队头删除,返回结点值。
具体步骤如下:
1. 定义变量删除结点:p。
2. 判断队列是否为空:
1) 若为空,返回错误信息。
2) 若不为空,执行第 3 步。
3. 将要删除的结点指向头结点的下一个结点(即队列头部),即 p = rear->next。
4. 判断队列是否只有一个结点:
1) 若是,置空队列。
2) 若不是,将头结点的下一个结点指针指向删除结点的下一个结点(即第三步中,p 结点的下一个结点),即 rear->next = p->next。
5. 判断删除结点是否为队列尾结点:
1) 若是,修改队尾指针:rear = rear->next。
2) 若不是,不需要修改队尾指针。
6. 返回删除结点的值:return p->data。
阅读全文