前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >单链表

单链表

作者头像
小王不头秃
发布2024-06-19 14:43:41
1780
发布2024-06-19 14:43:41
举报

单链表

单链表是一个储存数据的表,那么顾名思义,单链表的存储方式应该就是想一条链子一样将所有的数据连接起来。

储存方式:

顺序存储: 顺序存储就是通过数组来实现。在单链表中相邻的数据之间一定有一个先后的顺序,那么就可以依靠这个先后顺序,将数据依次存储在数组中。 可定义一个结构体

代码语言:javascript
复制
struct Node
{
int data;
int parent;
}

通过建立Node数组,可以将相邻数据之间的关系存储下来。 优点: 建表更加简单易懂,操作简单 缺点: 使用之前必须确定数据的大小,否则可能会出现数组越界或则大量空间浪费的情况 链式存储: 链式储存相对于顺序存储来说更加的灵活,相同的是,第一步还是要自定义一个结构体。

代码语言:javascript
复制
struct Node
{
int data;
Node*last;
}

last存储的是下一个数据的地址,这样各个数据通过指针相连,就可以将顺序存储的缺点给消除掉。 在建立新的节点时,要用new来申请动态空间,虽然在单链表中相邻的数据遍历时是紧紧挨着的,但这并不代表相邻两个节点的地址是相连的。 优点: 相对于顺序存储来说,链式存储更加的灵活,不需要提前确定链表的长度 缺点: 访问时可能需要遍历所有的节点,使用时要特别注意空指针。

建表方式

无论是头插还是尾插都要先定义一个头节点或则头指针 头插建表: 头插建表就是不断在头节点之后并且紧邻头节点加入节点,(头节点之后的第一个节点是首元节点),即在头插建表时首元节点会不断地变化。

代码语言:javascript
复制
Node*first;
void create()
{
first=new Node;  //头节点也需要申请内存
first->last=NULL;
int data;
Node *e;
while(cin>>data)
{
e=new Node;
e->data=data;
e->last=first->last;
first->last=e;
}
}

此时使用头指针还是头节点,分别插入数据时每次都是相同的。 尾插建表: 尾插法与头插法不同的点在于尾插是在尾部添加新节点,即尾节点是一直变化的,并且每一次添加节点时我们都需要确定尾节点,而获取单链表中的尾节点只有遍历,这种方式十分的浪费时间,为了减小程序的时间复杂度(减少程序运行时间),我们需要设立一个节点来储存尾节点:

代码语言:javascript
复制
Node*first;
void create()
{
first=new Node;  //头节点也需要申请内存 这一步是必须做的
int data;
Node *e;
Node *h;      //用于储存尾节点
h=first;       
while(cin>>data)
{
e=new Node;
e->data=data;
h->last=e;
h=e;              //尾节点后移
}
e->last=NULL;     //最后进行赋空即可,前面每一次都赋空也可以。但浪费时间
}
单链表的遍历
代码语言:javascript
复制
Node *s;
s=first->last;   //因为需要不断的后移指针,直接对first后移会导致first变化,导致其他操作无法进行
while(s)
{
cout<<s->data;
s=s->last;
}
总结

单链表最容易出错的地方在于指针的运用,指针常常出错的原因大多是空指针的使用。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 单链表
    • 储存方式:
      • 建表方式
        • 单链表的遍历
          • 总结
          相关产品与服务
          对象存储
          对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档