服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C++超详细分析单链表的实现与常见接口

C++超详细分析单链表的实现与常见接口

2022-10-27 13:52程序猿教你打篮球 C/C++

链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的,本章带你分析单链表的实现与常见接口

相信如果看完了上期顺序表的小伙伴应该发现了顺序表的诸多缺点:

中间/头部的插入删除,时间复杂度为O(N)!

增容需要申请新的空间,拷贝数据,释放旧空间,会有不少的消耗。

增容一般是呈倍增长,势必会有一定的空间浪费。

链表的OJ题会单独出一期的哦!

那么,如何解决以上的问题呢?

那么什么是链表呢?—— 链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。

C++超详细分析单链表的实现与常见接口

 实际中要实现的链表的结构非常多样,以下情况组合起来就有8种链表结构:

1. 单向、双向         2. 带头、不带头            3. 循环、非循环

我们只讲最简单和最复杂的,毕竟一句老话,冬天到了春天还会远吗?

今天我们讲无头单向非循环链表,下期讲带头双向循环链表 !

好的,有了上面的认识正式进入我们本期的学习。

无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结 构的子结构,如哈希桶、图的邻接表等等。另外这种结构在笔试面试中出现很多。

 我们来看到单链表的架构:

C++超详细分析单链表的实现与常见接口

  单链表和顺序表不一样,我们是需要的时候动态申请一个节点空间就够了!

SLTNode* BuySListNode(SLTDataType x)
{
	SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));
	if (newnode == NULL)
		return NULL;//做空指针判断
	newnode->data = x;
	newnode->next = NULL;

	return newnode;
}

这里我们利用malloc函数开辟了一个SLTNode大小的空间(得用SLTNode* 来接收),malloc和realloc一样如果开辟失败会返回空指针,所以这我们需要先做判断!不为空则把数据放入data,并且把指向下一个节点的 next 置空!并且返回新节点的地址!(这里如果不明白则需要补充结构体,指针,动态内存开辟的知识)

首先我们还是来实现单链表的头部插入数据!

C++超详细分析单链表的实现与常见接口

这里我们可以看到,不带哨兵位(带头链表)链表需要改变头指针位置,下期我们学带头双向循环链表就可以不用双指针了!

下面是我们的单链表尾部插入数据!

C++超详细分析单链表的实现与常见接口

接着来实现单链表头部删除数据!

C++超详细分析单链表的实现与常见接口

  下面来到单链表的尾部删除数据!

C++超详细分析单链表的实现与常见接口

在指定元素前插入节点!

 这个我们首先需要找到指定节点元素的地址!

C++超详细分析单链表的实现与常见接口

 接下来就是实现我们的指定元素前插入节点的函数了!

C++超详细分析单链表的实现与常见接口

同理我们接着来实现删除指定元素的节点!

C++超详细分析单链表的实现与常见接口

最后其实还有一个修改节点数据,这个看了上期的顺序表实现起来就很简单,留给你们自己研究去啦!学好编程多想,多敲代码准没错! 

        那么以上这就是我们无头单向非循环链表的常见接口了,如果你看完感觉比较吃力看不懂的话,建议多去回顾下c语言指针,结构体,动态内存这几张的内容!当你能把这个单链表理解透彻了,下一期的带头双向循环链表也很容易理解的,代码实现起来更轻松,加油吧!

最后还是那句话我们一起快乐编程不头秃!

gitee(码云):Mercury. (zzwlwp) - Gitee.com 

到此这篇关于C++超详细分析单链表的实现与常见接口的文章就介绍到这了,更多相关C++ 单链表的实现内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/m0_61784621/article/details/123352525

延伸 · 阅读

精彩推荐
  • C/C++c++关键字const的用法详解

    c++关键字const的用法详解

    在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定。const 可以用来修饰成员变量、成员函数以及对象,希望能够给你带来帮助...

    沉迷编程4922022-01-10
  • C/C++C语言实现学生打卡系统

    C语言实现学生打卡系统

    这篇文章主要为大家详细介绍了C语言实现学生打卡系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    ly_11156222021-10-18
  • C/C++详解C++右值引用

    详解C++右值引用

    很多初学者都感觉右值引用晦涩难懂,其实不然。右值引用只不过是一种新的 C++ 语法,真正理解起来有难度的是基于右值引用引申出的2种 C++ 编程技巧,...

    可可西11922021-11-12
  • C/C++C语言摄氏度互相转换华氏

    C语言摄氏度互相转换华氏

    这篇文章主要介绍了C语言摄氏度互相转换华氏,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随...

    A-test@解4982021-10-20
  • C/C++深入解析最长公共子串

    深入解析最长公共子串

    本篇文章是对最长公共子串进行了详细的分析介绍,需要的朋友参考下...

    C++教程网2512020-12-04
  • C/C++C语言简单实现门禁系统

    C语言简单实现门禁系统

    这篇文章主要为大家详细介绍了C语言简单实现门禁系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    我是四海6742021-07-19
  • C/C++C语言中for循环问题(一个小坑需注意)

    C语言中for循环问题(一个小坑需注意)

    这篇文章主要给大家介绍了关于C语言中for循环问题的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    sycgogogo12062021-10-27
  • C/C++makefile如何调用静态库的方法实现

    makefile如何调用静态库的方法实现

    这篇文章主要介绍了makefile如何调用静态库的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友...

    wch_NUDT7112021-10-15