mysql 双向链表_双向链表

双向链表是链表变型,相比于单链表导航或者是向前和向后的两种方式。以下是重要的术语来理解双向链表的概念

Link − 链表的每个链路存储数据称为一个元素。

Next − 链表的每个链接包含一个链接到下一个被称为下一个(Next)。

Prev − 链表的每个链接包含一个链接,称为上一个链接(Prev)。

LinkedList − LinkedList包含连接链接到名为首先第一个链接,并称为最后的最后一个链接(Last)。

双向链表表示

d2f04fcec7bbdeaf7ef5538e5129e80d.png

按照如上图中所示,以下是要考虑的重要问题。

双向链表包含一个名为第一个(first)和最后一个链接(last)元素。

每个链路负责数据字段和LINK域被称为下一个(Next)。

每一个Link链接,其利用其下一个链接指向下一个链接。

每一个Link链接使用其上一个链接指向上一个链接。

最后一个链接带有链接的空标记列表的末尾。

基本操作

下面是一个列表支持的基本操作。

插入 − 在列表的开头添加的元素。

删除− 删除在列表开头的元素。

插入最后 − 在列表的末尾添加元素。

删除最后 − 删除列表的末尾的元素。

插入之后− 列表中的项目后添加元素。

删除 − 用键从列表中删除一个元素。

正向显示 − 以向前的方式显示完整列表。

后向显示 − 向后的方式显示完整列表。

插入操作

下面的代码演示了插入操作,从一个双向链表的开始。

//insert link at the first location

void insertFirst(int key, int data){

//create a link

struct node *link = (struct node*) malloc(sizeof(struct node));

link->key = key;

link->data = data;

if(isEmpty()){

//make it the last link

last = link;

}else {

//update first prev link

head->prev = link;

}

//point it to old first link

link->next = head;

//point first to new first link

head = link;

}

删除操作

下面的代码演示了删除操作,在一个双向链表的开始。

//delete first item

struct node* deleteFirst(){

//save reference to first link

struct node *tempLink = head;

//if only one link

if(head->next == NULL){

last = NULL;

}else {

head->next->prev = NULL;

}

head = head->next;

//return the deleted link

return tempLink;

}

在结尾插入操作

下面的代码演示了在一个双向链表的最后一个位置的插入操作。

//insert link at the last location

void insertLast(int key, int data){

//create a link

struct node *link = (struct node*) malloc(sizeof(struct node));

link->key = key;

link->data = data;

if(isEmpty()){

//make it the last link

last = link;

}else {

//make link a new last link

last->next = link;

//mark old last node as prev of new link

link->prev = last;

}

//point last to new last node

last = link;

}

要查看 C编程语言的实现,请点击 。

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值