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

简介: 用数组来模拟单链表和双链表

单链表

//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的数删除

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


相关文章
【数据结构】数组、双链表代码实现
【数据结构】数组、双链表代码实现
|
4月前
|
存储 算法 搜索推荐
探索常见数据结构:数组、链表、栈、队列、树和图
探索常见数据结构:数组、链表、栈、队列、树和图
147 64
|
3月前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
99 5
|
8月前
|
Java
环形数组链表(java)
环形数组链表(java)
|
8月前
|
存储 算法 Go
算法学习:数组 vs 链表
算法学习:数组 vs 链表
107 0
|
4月前
|
存储
一篇文章了解区分指针数组,数组指针,函数指针,链表。
一篇文章了解区分指针数组,数组指针,函数指针,链表。
33 0
|
6月前
|
存储 开发者 C#
WPF与邮件发送:教你如何在Windows Presentation Foundation应用中无缝集成电子邮件功能——从界面设计到代码实现,全面解析邮件发送的每一个细节密武器!
【8月更文挑战第31天】本文探讨了如何在Windows Presentation Foundation(WPF)应用中集成电子邮件发送功能,详细介绍了从创建WPF项目到设计用户界面的全过程,并通过具体示例代码展示了如何使用`System.Net.Mail`命名空间中的`SmtpClient`和`MailMessage`类来实现邮件发送逻辑。文章还强调了安全性和错误处理的重要性,提供了实用的异常捕获代码片段,旨在帮助WPF开发者更好地掌握邮件发送技术,提升应用程序的功能性与用户体验。
103 0
|
6月前
|
存储 Java 开发者
揭秘!HashMap底层结构大起底:从数组到链表,再到红黑树,Java性能优化的秘密武器!
【8月更文挑战第24天】HashMap是Java集合框架中的核心组件,以其高效的键值对存储和快速访问能力广受开发者欢迎。在JDK 1.8及以后版本中,HashMap采用了数组+链表+红黑树的混合结构,实现了高性能的同时解决了哈希冲突问题。数组作为基石确保了快速定位;链表则用于处理哈希冲突;而当链表长度达到一定阈值时,通过转换为红黑树进一步提升性能。此外,HashMap还具备动态扩容机制,当负载因子超过预设值时自动扩大容量并重新哈希,确保整体性能。通过对HashMap底层结构的深入了解,我们可以更好地利用其优势解决实际开发中的问题。
163 0
|
6月前
|
存储 Java 程序员
"揭秘HashMap底层实现:从数组到链表,再到红黑树,掌握高效数据结构的秘密武器!"
【8月更文挑战第21天】HashMap是Java中重要的数据结构,采用数组+链表/红黑树实现,确保高效查询与更新。构造方法初始化数组,默认容量16,负载因子0.75触发扩容。`put`操作通过计算`hashCode`定位元素,利用链表或红黑树处理冲突。`get`和`remove`操作类似地定位并返回或移除元素。JDK 1.8优化了链表转红黑树机制,提升性能。理解这些原理能帮助我们更高效地应用HashMap。
59 0
|
6月前
|
存储 算法 Java
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
55 0