面向对象的数据结构–链 list
1.概述
链中一般带有一个不存放任何元素的哑元素
分类:
单向(单链和单循环链)
双向(双链和双循环链)
2.使用
访问list中的元素需要使用迭代器(iterator),可用于list::iterator
插入元素
L.insert(iter,0);//在iter所指向的元素2之前插入0
替换元素
*iter=10;
删除元素
iter=L.erase(iter);//不可删除哑元素
iter还有常量迭代器list::const_iterator c_iter迭代器遍历L中的所有元素并在屏幕上输出
list<int>::const_iterator c_iter;
for(c_iter=L.cbegin();c_iter!=L.cend();++iter)
cout<<*c_iter<<'';
简练形式
for(auto c_iter=L.cbegin();c_iter!=L.cend();+=iter)
cout<<*citer<<'';
逆向迭代器和常量迭代器
//逆向迭代
for(auto cr_iter=L.crbegin();cr_iter!=L.crend();++cr_iter)
cout<<*cr_iter<<endl;
预处理并计算特殊统计量
#include<list>
#include<iostream>
void InputandPreprocess(list<int> &L,int&MAX)
{
L.clear();//清空L中的所有数据
int data;
cin>>data;
MAX=data;
while(data>=0)
{
L.push_back(data);
if(data>MAX)
max=data;
cin>>data;//读入数据
}
}
熟悉双循环链
#include<iostream>
#include<vector>
#include<list>
using namespacen std;
int main()
{
const size_t d=8;//学号8位
const size_t W=3;//循环移位次数
const size_t MAX=10;//最大迭代数
vector<int> V(d);
list<int> L;
for(size_t i=0;i<d;i++)
{
cin>>V[i];
L/push_back(V[i]);
}
auto iter=L.begin();
size_t x=0;
for(size_t i=0;i<MAX;i++)
{
for(size_t j=0;j<W;j++)