优点:不要求大片连续空间,改变容量方便
缺点:不可以随机存取,要耗费一定空间存放指针
用代码定义一个单链表
typedef struct LNode{ //定义单链表节点类型
Elemtype data; //每个节点存放一个数据元素
struct LNode *next; //指针指向下一个节点
}LNode,*LinkList;
LNode *p=(LNode*)malloc(sizeof(LNode));
LNode *L:强调这是一个节点
LinkList L: 强调这是一个单链表
不带头结点的单链表
//初始化一个空的单链表
bool InitList(LinkList &L){
L=NULL; //空表,暂时还没有任何结点(防止脏数据)
return true;
}
//判断单链表是否为空
bool Empty(LinkList L){
if(L==NULL)
return true;
else
return false;
}
带头结点的单链表
//初始化一个空的单链表(带头结点)
bool InitList(LinkList &L){
L=(LNode*)malloc(sizeof(LNode)); //分配一个头结点
if(L=NULL) //内存不足,分配失败
return false;
L->next=NULL; //头结点之后暂时还没有节点
return true;
}
//判断单链表是否为空(带头结点)
bool Empty(LinkList L){
if(L->next==NULL)
return true;
else
return false;
}
不带头结点,写代码更麻烦
对第一个数据结点和后续数据结点的处理需要用不同的代码逻辑
对空表和非空表的处理需要用不同的代码逻辑