在使用头插法初始化链表时,修改头结点的指针域,将新结点放在链表里:front->next=s;是什么意思
时间: 2023-05-23 22:00:57 浏览: 54
这意味着将新节点 s 添加到链表中,并使其成为新的头节点。具体来说,链表的头指针 front 指向新插入的节点 s 的下一个节点,而 s 的指针指向原来的头节点。这样做可以快速地在链表的开头插入节点,而不需要遍历整个链表。
相关问题
假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点,试编写相应的队列初始化,入队列和出队列的算法
队列的初始化算法如下:
```
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(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` 是数据元素类型。