什么是单链表
用代码定义一个单链表
struct LNode {//定义单链表节点类型
ElemType data;//每个节点存放一个数据元素
struct LNode* next;//指针指向下一个节点
};
struct LNode* p = (struct LNode*)malloc(sizeof(struct LNode));//增加一个新节点:
//在内存中申请一个节点所需空间,并用p指向这个节点
typedef关键字——数据类型重命名
typedef <数据类型> <别名>
typedef struct LNode LNode;
上面代码可以改写为:LNode * p = (LNode *) malloc(sizeof(LNode));
typedef struct LNode {
ElemType data;
struct LNode* next;
}LNode,*LinkList;
LNode* GetElem(LinkList L, int i) {//LNode * 强调返回的是一个节点,LinkList强调这是一个单链表
int j = 1;
LNode* p = L->next;
if (i == 0)
return L;
if (i < 1)
return NULL;
while (p != NULL & j < i) {
p = p->next;
j++;
}
return p;
}
不带头结点的单链表的初始化
typedef struct LNode {
ElemType data;
struct LNode* next;
}LNode,*LinkList;
//初始化一个空的链表
bool InitList(LinkList& L) {
L = NULL;//空表,暂时还没有任何节点
return true;
}
//判断单链表是否为空
bool Empty(LinkList L) {
return (L == NULL);
}
void test() {
LinkList L;//声明一个指向单链表的指针
//初始化一个空表
InitList(L);
//...后续代码...
}
带头结点的单链表的初始化
typedef struct LNode {
ElemType data;
struct LNode* next;
}LNode,*LinkList;
//初始化一个空的链表(带头结点)
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;
}
void test() {
LinkList L;//声明一个指向单链表的指针
//初始化一个空表
InitList(L);
//...后续代码...
}