双向链表与单向链表较为类似,单向链表有一个指针域,用来指向后继结点,而双向链表有两个指针域,分别用来指向前驱结点和后继结点。玩双向链表时一定要从单向链表的思维中跳出来,否则在操作双向链表时就会出现各种问题。在玩双向链表时,一定要动手画图或者在脑子里画图,考虑好每个操作细节。

一、双向链表的基本操作
双向链表的数据结构:
typedef struct node//定义双向链表的数据结构
{
int data;
struct node * prior;
struct node * next;
}Node;
这里以整型作为结点数据域的数据类型
1. 初始化链表
Node * initialize();
创建头结点,初始化头结点的各个成员变量,返回头结点的指针
2.头插法添加结点
void insertFirst(Node * head,int data);
方法形参上需传入头结点指针和新结点的数据,方法内会创建新结点,之后操作新结点、头结点、首结点,将新结点插入首结点的位置
3.尾插法添加结点
void append(Node * head,int data);
方法形参上需传入头结点指针和新结点的数据,方法内会创建新结点,之后操作头结点、末结点、新结点,将新结点插入到末结点的后面
4.删除结点
int delete(Node * head,int data);
方法形参上需传入头结点指针和结点的数据,方法内会从首结点向末结点遍历,查找指定数据的结点,若查找成功,则删除该结点,返回1,若查找无果,返回0
5.反转链表
void reverse(Node * head);
方法形参上需传入头结点指针,方法内会将链表的首尾顺序进行颠倒,原先的首结点作尾结点,原先的尾结点作首结点
6.正向遍历链表
void traverse(Node * head);
方法形参上需传入头结点指针,方法内输出链表的所有结点数据,不包括头结点
7.反向遍历链表
void traverseReversely(Node * head);
方法形参上需传入头结点指针,方法内从末结点到首结点进行数据输
本文介绍了双向链表的基础知识,包括其数据结构、初始化、头插法和尾插法添加结点、删除结点、反转链表以及正向和反向遍历链表的操作。同时,提供了C语言的代码实现,详细展示了各项操作的过程。
最低0.47元/天 解锁文章
2354

被折叠的 条评论
为什么被折叠?



