栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数组模拟双链表

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数组模拟双链表

因为数组模拟的大部分数据结构都相对于结构体而言,在运行速度上占优势,所以本次双链表我也会用数组模拟的方式来实现,接着上一次的单链表实现,这次再更一波双链表。

(本弱弱之所以用数组来实现链表,是因为结构体看的脑袋疼......数组版本好理解些)

接下来就开始正题吧!

双链表跟单链表有着相似的结构,但不同点在于,双链表的结点可以指向它的上一个位置和它的下一个位置(单链表只能指向它的下一个位置)。

在每个代码的前面,我都给了相应的图解,来尽大可能地帮助大家更好的理解

void init()

{

r[0] = 1, l[1] = 0;//当中初始化的数字可以任意

idx = 2;

}//表明双链表为空链表

双链表的插入操作:在某个结点的位置进行右插入或者是左插入

//其实这两个操作的任意一个操作,另一个操作可以通过调用另一个操作进行实现

//例如:add_r(int k,int x)是在第k个结点进行右插入x,那么左插入的实现就可以是,在k左边的结点进行右插入:add_r(int l[k],int x)

 

void add_r(int k, int x)//在下标为k的右边插入x

{

e[idx] = x;//1

r[idx] = r[k];//2q

l[idx] = k;//3

l[r[k]] = idx;//4

r[k] = idx;//5

//步骤4和步骤5不能更换顺序

}

void add_l(int k, int x)//在下标为k的左边插入x

{

add_r(l[k], x);

}

 

删除某一个结点

void remove(int k)//删除第k个结点

{

r[l[k]] = r[k];

l[r[k]] = l[k];

}

总体代码:

#include

using namespace std;

const int N = 10010;

int e[N], l[N], r[N], idx;

int m;

void init()

{

r[0] = 1, l[1] = 0;

idx = 2;

}

void add_r(int k, int x)//在下标为k的右边插入x

{

e[idx] = x;//1

r[idx] = r[k];//2

l[idx] = k;//3

l[r[k]] = idx;//4

r[k] = idx;//5

//步骤4和步骤5不能更换顺序

}

void add_l(int k, int x)//在下标为k的左边插入x

{

add_r(l[k], x);

}

void remove(int k)//删除第k个结点

{

r[l[k]] = r[k];

l[r[k]] = l[k];

}

int main()

{

   

}

本文章代码来源于:ACWING中Y总的模板

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/869820.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号