目录
一、单链表
1.1定义
通过一组任意的存储单元来存储线性表中的数据元素。每给元素存放元素自身的信息外,还需要存放一个指向其后继的指针,其中data为数据域,存放数据元素;next为指针域,存放后继指针
typedef struct LNode{ //定义单链表结点类型
int data; //数据域
struct LNode *next; //指针域
}LNode, *LinkList;
(带头结点)通常头指针来标识一个单链表,头指针为NULL时表示一个空表。头结点可以不设任何信息,也可记录表长等信息。头节点的指针域指向线性表的第一个元素节点
*1.2操作
头插法
① s->next=L->next
②L->next=s
插入时间复杂度O(1)
尾插法
r->next=s
s->next=NULL
结点插入
找到p=GetElem(L,i-1)
①s->next=p->next
②p->next=s
删除节点
找到p=GetElem(L,i-1)
q=p->next
p->next=q->nect
free(q)
删除一个结点需知道被删除的前一个节点,但单链表不能向前找所以前面是未知的,删除p节点可以挪动数据来删除节点(偷天换日)
q=p->next
p->data=p>next->data
p->next=q->next
free(q)
二、双链表
2.1定义
两个指针prior和next
typedef struct DNode{ //定义双链表结点类型
int data; //数据域
struct DNode *prior,*next; //前驱指针和后继指针
}DNode,*DLinkList;
*2.2操作
插入
①s->next=p->next
②p->next->prior=s
③s->prior=p
④p->next=s
删除
① p->next=q->next
②q->next->prior=p
free(q)
*三、循环链表
*四、静态链表
#define MaxSize 50 //静态链表的最大长度
typedef struct{ //静态链表结构类型的定义
char data; //存储数据元素
int next; //下一个元素下标
}SLinkList[MaxSize]