假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点,试编写相应的队列初始化,入队列和出队列的算法
时间: 2024-04-21 10:04:35 浏览: 84
队列的初始化算法如下:
```
void InitQueue(LinkQueue &Q)
{
Q.front = Q.rear = new QueueNode; // 创建头结点
Q.front->next = Q.front; // 头结点指向自身
}
```
队列的入队列算法如下:
```
void EnQueue(LinkQueue &Q, ElemType x)
{
QueueNode *p = new QueueNode; // 创建新结点
p->data = x;
p->next = Q.rear->next; // 新结点插入队尾
Q.rear->next = p;
Q.rear = p; // 修改队尾指针
}
```
队列的出队列算法如下:
```
bool DeQueue(LinkQueue &Q, ElemType &x)
{
if (Q.front == Q.rear) // 队列为空
return false;
QueueNode *p = Q.front->next; // 取出队首结点
x = p->data;
Q.front->next = p->next;
if (Q.rear == p) // 如果出队列的是队尾结点
Q.rear = Q.front; // 修改队尾指针
delete p;
return true;
}
```
笑话:为什么猪会上天?因为它会飞!
相关问题
假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点,试编写相应的队列初始化,入队列和出队列算法
队列初始化:
```C++
void InitQueue(LinkList &rear)
{
rear = (LinkList)malloc(sizeof(LNode));
rear->next = rear; // 队列为空,队尾指向自己
}
```
入队列:
```C++
void EnQueue(LinkList &rear, ElemType x)
{
LinkList p = (LinkList)malloc(sizeof(LNode));
p->data = x;
p->next = rear->next;
rear->next = p;
rear = p; // 修改队尾指针
}
```
出队列:
```C++
bool DeQueue(LinkList &rear, ElemType &x)
{
if (rear == rear->next) // 队列为空
return false;
LinkList p = rear->next->next; // p指向队首元素结点
x = p->data;
if (p == rear) // 队列中只有一个元素
rear = rear->next;
rear->next = p->next; // 删除p结点
free(p);
return true;
}
```
假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点,试编写相应的初始化队列,入队列和出队列算法用c++表示
好的,我明白了。以下是相应的算法:
初始化队列:
```
void initQueue(LinkQueue &Q) {
Q.front = Q.rear = (LinkNode*) malloc(sizeof(LinkNode)); // 创建头结点
Q.front->next = Q.front; // 头结点指向自己,表示空队列
}
```
入队列:
```
void enQueue(LinkQueue &Q, ElemType x) {
LinkNode *s = (LinkNode*) malloc(sizeof(LinkNode));
s->data = x;
s->next = Q.rear->next; // 新节点指向头结点
Q.rear->next = s; // 将新节点插入队尾
Q.rear = s; // 修改队尾指针
}
```
出队列:
```
bool deQueue(LinkQueue &Q, ElemType &x) {
if(Q.front == Q.rear) return false; // 空队列
LinkNode *p = Q.front->next;
x = p->data;
Q.front->next = p->next; // 将头结点指向删除节点的下一个节点
if(Q.rear == p) Q.rear = Q.front; // 如果删除的是队尾节点,修改队尾指针
free(p); // 释放空间
return true;
}
```
其中,`LinkNode` 是循环链表的节点结构体,`LinkQueue` 是队列结构体,`ElemType` 是数据元素类型。
阅读全文