数组模拟双链表

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

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

接下来就开始正题吧!

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

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

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<iostream>

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总的模板

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值