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