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函数进行插入,因此执行效率比较低。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值