用数组的方式来模拟链表

1 篇文章 0 订阅
1 篇文章 0 订阅

       链表有两个重要的东西,一个是数据域,另一个是指针域。但是我们用结构体加指针的方式我们每次都要动态申请空间,而C++中的new函数实现非常的耗时,所以我们当有许多组数据的时候,我们通常采用数组模拟的方式来存储链表。

        数组中的下标表示的是结点,e[N]表示的是当前结点里面存储的值,即数据域,ne[N]表示的是当前结点指向下一个节点的位置,即指针域。我们要实现还需要一个int类型的变量head,head表示头节点的下标,idx是一个指针idx表示当前已经用到了哪个点(当我们在声明数组大小的时候有N个点,首先idx指向的是第一个点,当我们要给新的一个点分配空间的时候,然后idx指针就接着往后面移动一位。

        下面来谈一谈一些基本的操作:

1:初始化链表

const int N=1e+5+10;

int head,e[N],ne[N],idx;

void init(){
     head=-1;//初始的时候链表是空的,头结点指向的是空集
     idx=0;//初始的时候idx是从0开始的
}

2:如何在链表里面插入一个点

(1)将一个数插入到头结点

思路:1:将这个结点的指针指向head结点所指向结点的位置;

           2:将head结点所指向结点的位置删除,然后head结点指向这个结点。

void add_to_head(int x){
     e[idx]=x;//将x存到当前结点里面 
     ne[inx]=head;//将当前节点的指针指向head结点
     head=idx;//head指针指向idx
     idx++;
}

(2)将一个数插入到链表的任意一个位置(除了头结点)

思路:1:将这个结点的指针指向插入到链表中第k个结点所指向结点的位置;

           2:将第k个结点所指向结点的位置删除,然后第k个结点指向这个结点。

void add(int k,int x){
//k表示我要将这个结点插入到链表的第几个节点的后面,x表示要插入结点的值
     e[idx]=x;
     ne[idx]=ne[k];
     ne[k]=idx;
     idx++;
}

3:如何删除链表中的一个元素

将下表为k的结点的后面一个结点删掉

void remove(int k){
     ne[k]=ne[ne[k]];
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米兰的小码匠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值