在数据结构中会看到:
typedef struct QNode
{
QElemType data; //数据域
struct QNode *next; //指针域
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front; //队头指针
QueuePtr rear; //队尾指针
};
关键在于后面的那个部分如何理解
就是QNode,*QueuePtr这两个如何理解;
可以这样来理解
typedef struct QNode Qnode
typedef struct QNode *QueuePtr
同样通过这样一个例子可以这样来理解
typedef struct int ElemType
typedef struct int* ElemTypePtr
第一个是 定义新的整型变量 ElemType
第二个是 定义新的指向整型变量的指针 ElemTypePtr
可以简单理解为
ElemType = int
ElemTypePtr = int*
同理在上面的结构体中
可以理解为
typedef struct QNode QNode
typedef struct QNode* QueuePtr
于是
QNode 的对象都是结构体
QueuePtr 的对象都是结构体指针
使用起来会方便一些。
单链表存储结构
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
以上代码段可以分解为
typedef struct LNode LNode; //将结构体类型struct LNode重命名为LNode
typedef struct LNode *LinkList; //将struct LNode *重命名为LinkList
创建单链表
LinkList L; //等价于 struct LNode * L
可以理解为,通过typedef,将struct LNode *替换为LinkList,当我们在使用LinkList L定义变量时,实际上就是在使用 struct LNode * L定义变量。使得以后想定义指向struct LNode类型的指针变量时,不需要写struct LNode * ,只需要使用LinkList,减少了代码的书写。
提示:
当我们使用语句LinkList L创建单链表后,再调用InitList函数对单链表进行初始化为空表。