1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 数组模拟静态链表

数组模拟静态链表

时间:2019-08-27 05:45:48

相关推荐

数组模拟静态链表

在使用结构体实现链表时,我们要用到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;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。