一,定义
什么是单链表呢?
单链表是一组数据项的集合,其中每个数据项都是一个节点的一部分,每个节点都包含指向下一个节点的链接,也就是指针
单链表的特点是什么呢?
- 数据元素在 逻辑关系上相邻 ,用指针表示
- 单链表 中访问数据元素时需从头开始,即顺序访问
- 比顺序表的优势在于,提供高效的重排数据项的能力
C代码:
typedef struct LNode {
ElemType data;
struct LNode *next;
}LNode, *LinkList;
其中 data 是数据域 *next是指针域
用指针表示链接,用结构体表示结点,结点是由数据项和链接组成的,链接是指向下一个结点的指针
注意:头指针指向单链表中的第一个结点
单链表有哪些基本形态呢?
(1)空表
即链表L中没有元素 L->next == NULL;
(2)非空表
即L链表中有元素
注意:当链表为空时,不允许链表进行删除操作。当链表非空是可以进行插入,删除操作。
二,单链表的基本操作
(1)单链表如何初始化呢?
Stutas InitList(LinkList &L) {
L = (LinkList)malloc(sizeof(LNode));
if(!L)
exit(overflow);
L->next=NULL;
return OK;
}
其中L是链表的头结点 & 是取地址符,相当于获取L的地址
(2)取出链表中的某个元素的操作
分析:
单链表是一种 顺序访问 的结构,为找到第i个数据元素,必须先找到第(i-1)个数据元素。我们可以定义一个指针p,int型 i , j=0 让指针p始终指向单链表中第j个节点。移动指针,比较 j 和 i 若等到 j 和 i 相等的时候,就找到我们需要的元素。 (其实,就是让你的指针p指向链表中的第 j 个位置,从此位置依次向后查找 直到查到 为止)
代码如下:
Status GetElem_L(LinkList L, int i, ElemType &e){
p = L->next;
j = 1;
while(p && j<i){
p=p->next;
j++;
}
//第i个元素不存在
if(!p || j>i){
return ERROR;
}
e = p->data;
return OK;
}
此代码中L是带头结点的头指针,用 e 返回第 i 个元素的值,p指向第一个结点 j 为计数器 。通过while循环 顺着指针向后查找,直到 p 指向第 i 个元素 或 p指向 NULL(即链表中没有第 i 个元素)