用数组来模拟单链表和双链表

单链表

//head 表示头结点的下标
//e[i]表示结点i的下标
//ne[i]表示结点i的next指针是多少
//idx存储当前已经用到那个点//每个变量表示的意思

首先是初始化

void init() {
    head = -1;
    idx = 0;
}

然后是将x插入到头结点

void add_to_head(int  x) {
    e[idx] = x;//现将x存起来
    ne[idx] = head;//把指针存进ne这个数组里面
    head = idx;//更新头结点
    idx++;
}

接着实现将x插入到下标是k的点的后面

void add(int k, int x) {
    e[idx] = x;
    ne[idx] = ne[k];
    ne[k] = idx;
    idx++;
}

最后就是来实现将下标是k的点后面的数删除

void remove(int k) {
    ne[k] = ne[ne[k]];//这个地方很巧妙
}

通过以上方法就可以数组实现单链表的各种功能用数组实现单链表的一个题

双链表

首先就是初始化

void init(){//由于才开始是0,1
    r[0]=1;//让0的右边是1
    l[1]=0;//1的左边是0
    idx=2;//idx初始值就是2
}

然后就是插入操作这需要自己动手画图来理解以下是我自己
画的图。
在这里插入图片描述

void insert(int k,int x){
    e[idx]=x;//首先存进数值
    l[idx]=k;//左边是k
    r[idx]=r[k];//右边是k的右边
    l[r[k]]=idx;//k右边的左边是idx
    r[k]=idx++;//k的右边是也是idx
}

通过该操作就可以把下标为k的数的右边插入x
接着就需要实现删除操作

void remove(int k){
    l[r[k]]=l[k];//k右边的左边等于左边
    r[l[k]]=r[k];//k左边的右边等于右边
}

通过该操作就可以实现将下标是k的数删除

通过以上操作用数组来实现双链表的各种操作用数组实现双链表的一个题

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值