1.存储结构:链式存储
2.链式存储结构:把数据元素存储到连续或不连续的内存中。
3.单链表:由一个指针域和一个元素域组成一个结点,指针域的指针指向下一个结点的存储地址。(1)带头结点:头结点是一个空结点,元素域为空。plist->head->next是第一个结点
(2)不带头结点:head 是一个指针,没有元素域,指向第一个结点。plist->head是第一个结点。
4.特点:存储地址可以相邻也可以不相邻。便于插入和删除。
<2>不带头结点结构
2.1结构体设计
2.2 不带头结点初始化
void InitList(LinkList* plist);
带头结点初始化
2.3 清空链表元素 将有效结点删除
void Clear(LinkList* plist);
2.4销毁 清空+删除头节点
void Destory(LinkList* plist);
2.5 判空
bool IsEmpty(LinkList* plist);
2.6头插
bool InsertHead(LinkList* plist, ElemType val);
2.7 尾插
bool InsertTail(LinkList* plist, ElemType val);
2.8 指定位置插入 删除有效结点
bool InserPos(LinkList* plist, int pos, ElemType val);
2.9头删
bool DeleteHead(LinkList* plist);
2.10 尾删
bool DeleteTail(LinkList* plist);
2.11 按位置删除
ElemType DeletePos(LinkList* plist, int pos);
2.12 删除指定元素的结点
bool DeleteVal(LinkList* plist, ElemType val);
2.13 获取指定结点的前驱结点
ListNode* GetPrevNode(LinkList* plist, ElemType val);
2.14 获取指定结点的后继结点
ListNode* GetNextNode(LinkList* plist, ElemType val);
2.15 删除指定结点的前驱结点
bool DeletePrevNode(LinkList* plist, ElemType val);
2.16 删除指定结点的后继结点
bool DeletNextNode(LinkList* plist, ElemType val);