C++ STL之slist单向链表容器使用方式

 更新时间:2024年04月23日 10:15:59   作者:csdn_HZW  
这篇文章主要介绍了C++ STL之slist单向链表容器使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

slist为单向链表的泛化容器,与list双向链表容器一样,实现了线性表数据的链表存储,数据元素不必在物理内存中连续分布。

slist链表的节点,只有后继的指针,不含前驱的指针。因此,在节省前驱指针的存储空间的同时,也就不再支持迭代器的反向移动。

1.slist技术原理

slist内部的链表由头指针、头节点和元素节点组成,每个节点含有指向后继节点的指针,最后一个节点的指针为null,可见slist没有形成一个环形回路。

单向链表结构

头节点一般不存储数据,为了使各个元素节点都有前驱节点的指针指向它以便能够不加区别的对第一个元素节点和其他元素节点进行统一处理,所以构造头节点。

2.slist应用基础

list对象的创建和vector一样,不多解释。元素的删除、归并、排序与list相同。

2.1初始化赋值和遍历

通常使用push_front函数进行初始化,由于slist的头节点仅有一个指针域保存首元素地址,而没有存放最后一个元素的地址,因此slist没有提供类似的push_back函数能够在容器尾部添加元素。

push_front函数在链表首元素前面,插入一个新元素,使之成为首元素。

遍历slist和list一样,只能使用迭代器进行遍历,而不能使用数组下标的形式。

#include <QList>                 //在qt中QList就是单向链表,用法和slist相同
#include <QCoreApplication>
#include<QString>
using namespace std;
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QList<int> s;
    s.push_front(11);           //在首元素插入11
    s.push_front(23);           //在11前面插入23,即现在23为首元素
    s.push_front(39);          // 在首元素23之前插入39,即39,23,11
    QList<int>::iterator i,iend;
    iend=s.end();
    for(i=s.begin();i!=iend;i++)
    {
        cout << *i << " ";
    }
    cout << endl;
    return a.exec();
}

运行结果:

2.2元素的插入

对于任意位置上的slist链表元素的插入,可使用insert_after和insert函数,insert_after函数直接在指定的pos位置后插入新元素。

insert则从单向链表的头节点开始,找到pos的前驱位置,然后调用insert_after函数进行插入,因此执行效率比较低。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 基于QT设计一个春联自动生成器

    基于QT设计一个春联自动生成器

    春节是中国最隆重的传统节日,一到过年家家户户肯定是要贴春联;在春节前夕,会用大红纸张,加上浓墨书写祝福词语。本文将利用Qt框架设计一个春联自动生成器,需要的可以参考一下
    2022-01-01
  • C++实现LeetCode(36.验证数独)

    C++实现LeetCode(36.验证数独)

    这篇文章主要介绍了C++实现LeetCode(36.验证数独),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C语言中sizeof函数的基本使用总结

    C语言中sizeof函数的基本使用总结

    这篇文章主要给大家介绍了关于C语言中sizeof函数的基本使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-03-03
  • C++之友元:友元函数和友元类详解

    C++之友元:友元函数和友元类详解

    友元是一种允许非类成员函数访问类的非公有成员的一种机制。可以把一个函数指定为类的友元,也可以把整个类指定为另一个类的友元
    2013-09-09
  • C语言实现密码强度检测

    C语言实现密码强度检测

    这篇文章主要为大家详细介绍了C语言实现密码强度检测,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • C语言分别实现栈和队列详解流程

    C语言分别实现栈和队列详解流程

    栈和队列,严格意义上来说,也属于线性表,因为它们也都用于存储逻辑关系为 "一对一" 的数据,但由于它们比较特殊,因此将其单独作为一章,做重点讲解
    2022-04-04
  • Qt 中 isHidden 和 isVisible 的区别与使用小结

    Qt 中 isHidden 和 isVisible 的区别与使用小结

    Qt 中的 isHidden() 和 isVisible() 方法都用于查询组件显示或隐藏状态,然而,它们有很大的区别,了解它们对于正确操作组件致关重要,下面给大家介绍Qt 中 isHidden 和 isVisible 的区别与使用,感兴趣的朋友一起看看吧
    2025-03-03
  • C语言文件操作与相关函数介绍

    C语言文件操作与相关函数介绍

    文件(file)一般指存储在外部介质上数据的集合,比如我们经常使用的.txt, .bmp, jpg. .exe,.rmvb等等,下面这篇文章主要给大家介绍了关于C语言文件操作的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • C语言实现访问及查询MySQL数据库的方法

    C语言实现访问及查询MySQL数据库的方法

    这篇文章主要介绍了C语言实现访问及查询MySQL数据库的方法,涉及C语言基于libmysql.lib实现访问MySQL数据库的相关操作技巧,需要的朋友可以参考下
    2018-01-01
  • 使用C语言操作树莓派GPIO的详细步骤

    使用C语言操作树莓派GPIO的详细步骤

    今天抽空给大家普及使用C语言操作树莓派GPIO的详细步骤,本文大概分五步给大家介绍树莓派GPIO安装步骤,首先需要安装GPIO库然后进行一步步设置,具体操作方法跟随小编一起学习吧
    2021-06-06

最新评论