线性表
线性表的基本操作:
InitList(&L)初始化,构造一个空的线性表。
ListLength(L)求长度,返回线性表中数据元素个数
GetElem(L,i,&e)取表L中第i个数据元素赋值给e
LocateElem(L,e)按值查找,若表中存在一个或多个值为e的结点,返回第一个找到的数据元素的位序,否则返回一个特殊值
ListInsert(&L,i,e)在L中第i个位置前插入心的数据元素e,表长加1
ListDelete(&L,i,e)删除表中第i个数据元素,e返回其值,表长减1
顺序表
链表
单链表
定义:
特点:在内存中用一组任意的存储单元来存储线性表的数据元素,用每个数据元素所带的指针来确定其后继元素的存储位置。这两部分信息组成数据元素的存储映像,称为结点。
结点:数据域+指针域(链域)
带头结点的单链表:由于开始结点的位置被存放在头结点的指针域中,所以对链表第一个位置的操作同其他位置一样,无需特殊处理。无论链表是否为空,其头指针是指向头结点的非空指针,因此对空表和非空表的处理也就统一了,简化单链表操作的实现。
操作:
创建链表:
查询:
插入:先连后断
删除:
合并:
逆序:
循环链表
循环链表的最后一个结点的next的指针不为null,而是指向了表头结点。在循环链表中没有null为简化操作,在循环链表中往往加入表头节点。
特点:循环链表中,从任一结点出发都可访问到表中所有结点。而单链表中,只能从头指针开始,否则无法访问到该结点之前的其他结点。
双向链表
在前驱和后继方向都能便利的线性链表。
插入算法(先连后断):
P->prior=current;
p->next=current->next;
current-next=p;
p->next->prior=p;
删除算法:
current->next->prior=current->prior;
current->prior->next=current->next;