@TOC
引言
今天继续复习线性表,到了较难的链表部分。
正文
线性表的链式存储结构
链表
首先来介绍线性表的链式存储——链表
线性表中每个结点有唯一的前驱节点和后继结点
设计链式存储结构是,每个结点单独存储,为了表示逻辑关系,增加了指针域
链表分为单链表和双链表
我们主要学习单链表
双链表与单链表是相通的
单链表学好了 双链表也自然不难
在设计单链表我们往往增加一个头结点
它的好处是:
- 第一个结点的操作和表中其他结点的操作相一致,无需进行特殊处理
- 无论链表是否为空,都有一个头结点,因此空表和非空表的处理也就统一了
单链表
到此开始介绍单链表
首先是单链表中结点类型LinkNode的定义
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LinkNode;
这里的ElemType可以是char或int等类型
根据实际所需而定
由此可得单链表的特点:
- 当访问过一个结点后,只能接着访问它的后继结点,而无法访问它的前驱结点。
然后大致介绍一下单链表的插入和删除结点
由于使用的是链表 其过程与顺序表有很大不同
了解之后 开始单链表的基本操作
建表CreateList()
建立单链表有两种方法,分别是头插法和尾插法
头插法的建表图解如下
代码实现:
void CreateListF(LinkNode *&L, ElemType a[], int n)
{
LinkNode *s;
int i;
L=(LinkNode *)malloc(sizeof(LinkNode));
L->next=NULL;
for(i=0; i<n; i++)
{
s=(LinkNode *)malloc(sizeof(LinkNode));
s->data=a[i];
s->data=L->next;
L->next=s