//用代码定义一个单链表
struct LNode{ //定义单链表结点类型
ElemType data; //每个节点存放一个数据元素【data被称为数据域】
struct LNode *next;//指针指向下一个结点【next被称为指针域】
};
//增加一个新的结点:在内存中申请一个结点所需空间,并用指针p指向这个结点
struct LNode *p = (struct LNode *)malloc(sizeof(struct LNode))
//typedef关键字--数据类型重命名
typedef<数据类型><别名>
typedef struct LNode LNode;
LNode *p = (LNode *)malloc(sizeof(LNode))
<----王道书上的重命名----->
typedef struct LNode{ //定义单链表结点类型
ElemType data; //每个节点存放一个数据元素【data被称为数据域】
struct LNode *next;//指针指向下一个结点【next被称为指针域】
}LNode,*LinkList;
【等价于】
struct LNode{ //定义单链表结点类型
ElemType data; //每个节点存放一个数据元素【data被称为数据域】
struct LNode *next;//指针指向下一个结点【next被称为指针域】
};
typedef struct LNode LNode;
typedef struct LNode *LinkList;
//强调这是一个单链表用LinkList
//强调这是一个结点用LNode *
【不带头结点的单链表】
<----------------------------->
//不带头结点的单链表
typedef struct LNode{ //定义单链表结点类型
ElemType data; //每个节点存放一个数据元素【data被称为数据域】
struct LNode *next;//指针指向下一个结点【next被称为指针域】
}LNode,*LinkList;
//初始化一个空的单链表
bool InitList(LinkList &L){
L = Null; //空表 暂时还没有任何结点
return ture;
}
void test(){
LinkList L;// 声明一个指向单链表的指针【注意此处并没有创建结点】
InitList(L);
//后续代码
}
//判断单链表是否为空
bool Empty(LinkList L){
if (L == NULL)
return true;
else
return false;
}
【带头结点的单链表】
<---------------------------------------------->
【带头结点】
typedef struct LNode{ //定义单链表结点类型
ElemType data; //每个节点存放一个数据元素【data被称为数据域】
struct LNode *next;//指针指向下一个结点【next被称为指针域】
}LNode,*LinkList;
//初始化一个单链表(带头结点)
bool InitList(LinkList &L){
L = (LNode *)malloc(sizeof(LNode)); //分配一个头结点 头结点不存储数据
if (L==NULL) //内存不足 分配失败
return false;
L->next = NULL;//头结点之后暂时还没有结点
return ture;
}
void test(){
LinkList L;// 声明一个指向单链表的指针【注意此处并没有创建结点】
//初始化一个空表
InitList(L);
//后续代码
}
//判断单链表是否为空(带头结点)
bool Empty(LinkList L){
if (L->next = NULL)
return true;
else
return false;
}