那为什么我将typedef struct { link_node* front, * rear; }link_queue;改成了typedef struct { link_node* front, * rear; }*link_queue;就能使用q->front和q->rear了呢
时间: 2024-04-18 07:24:25 浏览: 82
当您将`typedef struct { link_node* front, * rear; } link_queue;`改为`typedef struct { link_node* front, * rear; }* link_queue;`时,您实际上创建了一个指向`struct`的指针类型`link_queue`。
这意味着在使用`link_queue`类型的变量时,您现在需要使用箭头运算符`->`来访问它们的成员,而不是点运算符`.`。
在之前的代码中,`link_queue`是一个结构体类型,而在改变后的代码中,`link_queue`变成了一个指向结构体的指针类型。因此,当您使用`link_queue* q`作为参数传递给函数时,您可以使用箭头运算符来访问`q`指向的结构体的成员。
总结一下:
- 当`link_queue`是结构体类型时,使用点运算符`.`来访问它的成员。
- 当`link_queue`是指向结构体的指针类型时,使用箭头运算符`->`来访问它的成员。
请注意,在修改代码时,还需要相应地调整其他与该数据类型相关的代码,以确保一致性。
相关问题
#include<stdio.h> #include<stdlib.h> typedef int elemtype; typedef struct link_node { elemtype data; link_node* next; }link_node; typedef struct { link_node* front, * rear; }link_queue; //初始化 void init_queue(link_queue& q) { q.front = q.rear = (link_node*)malloc(sizeof(link_node)); q.front->next = NULL; }
您好!您的第一个问题是关于一个简单的队列数据结构的初始化函数。下面是该函数的实现代码:
```c
#include<stdio.h>
#include<stdlib.h>
typedef int elemtype;
typedef struct link_node {
elemtype data;
link_node* next;
}link_node;
typedef struct {
link_node* front, * rear;
}link_queue;
//初始化
void init_queue(link_queue& q) {
q.front = q.rear = (link_node*)malloc(sizeof(link_node));
q.front->next = NULL;
}
```
这段代码定义了一个队列的数据结构`link_queue`,其中包含了一个前指针`front`和一个后指针`rear`。通过调用`init_queue`函数,可以初始化一个空队列。在初始化过程中,会为`front`和`rear`分配内存,并将它们都指向同一个空的链表节点。此时,队列为空,即没有任何元素。
那这个结构体typedef struct link_node { elemtype data; link_node* next; }link_node;为什么他的要写成q.front->next = NULL呢
在这个结构体中,`link_node`表示链表的一个节点,包含了一个数据成员`data`和一个指向下一个节点的指针`next`。
在初始化队列时,我们希望队列为空,即没有任何元素。因此,我们需要将队列的`front`和`rear`指针都指向一个空节点。
在`init_queue`函数中,我们使用`malloc`函数为`front`和`rear`分配了内存,然后将它们都指向同一个节点。为了标识这个节点为空,我们将其`next`指针设置为`NULL`,表示它没有指向其他节点。
这样一来,当队列为空时,`front`和`rear`指针都指向这个空节点,并且通过`next`指针可以判断队列是否为空。如果`front->next`为`NULL`,表示队列为空;否则,表示队列中有元素。
总结一下,在初始化队列时,我们通过将队列的头指针和尾指针都指向同一个空节点,并设置其`next`指针为`NULL`来表示队列为空。
阅读全文