线性表:具有相同特性的数据元素的一个有限序列。线性表的长度为n。一对一结构。
线性表的顺序存储结构——顺序表
物理结构上连续。
线性表的链式存储结构——链表
用一组任意的存储单元存放数据元素。可以连续可以不连续。除了存储数据域Data外,还要存储指针域next和prior。每个链表都有一个头结点,数据域为空,通过头结点的指针唯一表示该链表。
单链表
基本运算:建立(头插入/尾插入),初始化、销毁、判断为空、插入、删除、查找。
头插入法:时间复杂度O(n),缺点是表顺序与输入顺序相反。
void createrlistF(Linklist *&L,ElemType a[],int n)
{ Linklist *s;
int i;
L=(linklist*)malloc(sizeof(Linklist));//创建头结点
L->next=NULL; //初始为空
for(i=1;i<n,i++)
{
s=(linklist*)malloc(sizeof(Linklist));
s->data=a[i]); //创建数据节点*s
s->next= l-next; //将*s插入到原开始结点之前,头结点之后
l->next= s;
}
}
尾插入法:时间复杂度O(n),正序
void createrlistF(Linklist *&L,ElemType a[],int n)
{ Linklist *s;
int i;
L=(linklist*)malloc(sizeof(Linklist));//创建头结点
r=L; //r始终指向尾结点,初始时相当于指向头结点
for(i=1;i<n,i++)
{
s=(linklist*)malloc(sizeof(Linklist));
s->data=a[i]); //创建数据节点*s
r->next= s; //将*s插入r之后
r= s;
}
r->next= NULL;//清空尾结点next
}
双链表
循环单链表、循环双链表
约瑟夫环问题