C++数据类型——链表

举报
布小禅 发表于 2021/11/27 20:43:26 2021/11/27
【摘要】 C++数据类型——链表

C++数据类型——链表

C++中的数据类型就是鼎鼎大名的STL了,里面包含了容器、算法,迭代器。

容器其实际是所谓的数据结构,迭代器是一种特殊的指针,它是容器和算法的胶合剂,利用它能够更加安全快速的对内存进行操作

1. 链表

链表是一种线性表,只不过它是链式存储的,在插入删除上更加快捷。

1.1 链表的出现

这里不得不提一下数组,因为有数组,所以有了链表。

数组是一种固定内存的顺序表,因为内存固定,所以作用有限,并且在插入和删除上更费时间和空间。

链表因此而生,链表在插入和删除方面相比于数组更加显得快捷和方便

1.2 链表的结构

链表是一种数据结构,其简单的代码可以表现为这样

struct ListCode{
    int val;
    ListCode *next;
}

其中一个属性是值,另一个属性是指针,指向下一个ListCode,就像有一条线一样,从当前ListCode链接向下一个ListCode,这可能就是链表中链的由来吧。

1.3 STL中的链表

C++中的STL的链表为List 在头文件<list>中,我们在使用的使用直接拿来用就行了

就像这样:

#include <iostream>
#include <list>
using namespace std;
int main()
{
    list<int> li;  //创建一个链表
    li.push_back(2);  //往链表里添加一个数字2
    li.push_front(5);  //往2前面添加一个5
    Li.push_back(1);  //往2后面添加一个1
    int liSize = li.size();  //li的长度,既个数
    for (list<int>::interator i=li.begin();i!=li.end();i++)  //迭代器用于遍历链表
    {
        cout<<*i;
    }
    cout<<endl;
    return 0;
}

输出结果:521

1.4 liat基本操作

list不支持下标取值,修改元素,只能通过重新赋值

添加元素是由push来做的,有两种方法

一种是插在首位,一种是插在后面

插在首位:push_front()

插在后面:push_back()

删除元素就是pop

同样有两种方法,一前一后

不过还有一个方法是直接清空所有元素的:clear

插在首位:pop_front()

插在后面:pop_back()

查看元素也只有两个方法

查看首位:front()

查看后面:back()

当然也可以通过迭代器来查看

接下来看看这个代码,了解一下基本操作

#include <iostream>
#include <list>
using namespace std;
int main()
{
    list<int> a;        //创建一个
    a.push_back(5);
    a.push_back(2);
    a.push_back(1);
    int size;
    cout << a.front() << endl; //查看第一个元素
    cout << a.back() << endl; //查看最后一个元素
    a.pop_back(); //删除最后一个元素
    cout << a.back() << endl;
    a.pop_front(); //删除第一个元素
    cout << a.front() << endl;
    a.clear(); //清空链表
    size = a.size();
    cout << size << endl;
    return 0;
}

1.5 基本算法

排序:sort()

颠倒:reverse()

#include <iostream>
#include <list>
using namespace std;
int main()
{
    list<int> a;        //创建一个
    a.push_back(5);
    a.push_back(2);
    a.push_back(1);
    a.sort(); //排序后应该是125
    cout << a.front() << endl; //查看第一个元素
    cout << a.back() << endl; //查看最后一个元素
    a.reverse(); //翻转后应该是521
    cout << a.front() << endl; //查看第一个元素
    cout << a.back() << endl; //查看最后一个元素
    return 0;
}

所以输出结果为:

1
5
5
1
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。