数组模拟静态链表

在使用结构体实现链表时,我们要用到new来开辟内存,由于new的底层涉及内存分配,调用构造函数,指针转换等多种复杂且费时的操作。一秒大概能new1w次左右。在平时的工程代码中,不会涉及上万次的new操作,所以这种结构是一种 见代码知意 的好结构。但是在算法比赛中,经常碰到操作在10w级别的链表操作,如果使用结构体这种操作,是无法在算法规定时间完成的。所以,在算法比赛这种有严格的时间要求的环境中,不能频繁使用new操作。也就不能使用结构体来实现数组,因此我们只能用数组来模拟静态链表。

#include<iostream>

using namespace std;

int e[N], ne[N]; //e为数据域,ne为指针域
int head = -1, idx = 0;// idx表示当前已经插入的个数,head是链表头结点下标,
                           // e数组存储链表结点的值,ne存储某个下标结点的next指针(下标)
                           // 比如ne[1] = 2表示下标为1的结点的next指向下标为2的结点

void to_head(int x) //头插
{
    e[idx] = x; ne[idx] = head; head = idx++;
}

void insert(int k, int x) //在第k个插入的数后面插入x
{
    e[idx] = x; ne[idx] = ne[k]; ne[k] = idx++;
}

void remove(int k) //删除第k个插入的数后面一个数
{
    ne[k] = ne[ne[k]];
}

void print()
{
 	for(int i = head ; i != -1 ; i = ne[i]) 
 		cout << e[i] << " "; //链表的遍历
}
int main()
{
	to_head();
	insert();
	Print();
	remove();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Eliauk-GX

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

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

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

打赏作者

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

抵扣说明:

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

余额充值