只学习过指针与结构的基础,可以理解链表后面的内容,但看不太懂开头这些定义
比如这是一段在用单向链表实现队列存储的定义部分,
①为什么在struct Node定义阶段出现struct Node,是什么意思(是定义结构指针的意思吗)
②为什么在struct QNode定义阶段用的还是struct Node,为什么不用struct QNode
③后面用typedef把struct QNode替换为Queue的语句中为什么加,是作为新符号的名字的一部分还是说这是个指针?
④最后一行Queue PtrQ为什么前面就不带了
(初学,这一部分实在有些不太理解,请多指教,感谢)
struct Node{
ElementType Data;
struct Node *Next;
};
struct QNode{
struct Node *rear;
struct Node *front;
};
typedef struct QNode *Queue;
Queue PtrQ;
①你的猜想是正确的,它就是定义了一个结构体指针,
②定义什么都是看他的作用来定义,QNode就是存储了一个Node节点的信息,这可能会存放该节点上一个节点以及下一个节点的地址
③typedef就是给这个结构体起别名,既然是别名那他必须满足表示符命名规则(字母数字下划线),没错它直接把结构体起了一个指针的名字(Queue还是个指针)
④既然Queue类型已经是指针了,定义一个新的指针变量为何还需要*来标识PtrQ是个指针呢
看下面测试,他俩内存字节数都是8,明显是一个指针嘛。
// 定义Node结构体,用来存放结点数据和指向下一个结点的指针
struct Node {
ElementType Data; // 结点数据
struct Node *Next; // 指向下一个结点的指针
};
// 定义QNode结构体,用来存放指向一个Queue的首尾结点的指针
struct QNode {
struct Node *rear; // 指向Queue的尾结点
struct Node *front; // 指向Queue的首结点
};
// 给类型struct QNode*起别名为Queue
typedef struct QNode *Queue;
// 定义变量PtrQ,等价于struct QNode* PtrQ;
Queue PtrQ;