一、循环链表

定义:

《大话数据结构》循环链表和双向链表_指针变量

《大话数据结构》循环链表和双向链表_指针变量_02

 

《大话数据结构》循环链表和双向链表_双向链表_03

//A的头节点,即(1)
p=rearA->next;

//(2)后继指针的操作
//给我感觉就是,由于后继指针的特殊性,每次操作节点了,就是指向下个节点了,如果是指针操作,就还是老老实实呆在该节点
//注意B的头节点不要了
rearA->next=rearB->next->next;

//B的头节点
q=rearB->next;

//将A表的头节点的值赋值给rearB->next,即(3)
rearB->next=p;

free(p),free(q);

 

二、双向链表

定义:

《大话数据结构》循环链表和双向链表_链表_04

tyoedef struct dulnode
{
int data;
struct dulnode *prior;//前置指针
struct dulnode *next;//后继指针

}dulnode;

双向链表比单链表多了可以反向遍历查找,操作过程中:需要更改两个指针变量

双向链表的插入操作:

注意:顺序很重要不能写反

《大话数据结构》循环链表和双向链表_双向链表_05

我们在单链表的插入中写过,插入一个node,核心在于:后继指针以及node的操作,现时指针操作,后是节点操作

双向链表,类似,但是需要注意插入的过程

typedef struct dullist
{
int data;
struct dullist *prior;
struct dullist *next;
}dullist;

核心的步骤:
首先是后继的操作
步骤(4)+(2),写的时候,从右往左写,先写(2),再写(4)
(4)是node操作
(2)是指针操作
s->next=p->next(2)

p->next=s(4)

接下来是前驱的操作,都是node操作
步骤(3)+(1)
s->prior=p;(1)

p->next->prior=s;(3)


最后按照(1)-(4)的顺序写下来即可

双向链表的删除操作:

《大话数据结构》循环链表和双向链表_双向链表_06

直接说核心思想了

p->prior->next=p->next(1)//后继指针的操作
p->next->prior=p->prior(2)//前去指针的操作
free(p)