STL库中的链表容器(list)
链表容器由于属于C++库,因此在代码前必需加入
using namespace std;
list(链表容器)
它是一个双链表类模板,可以从任何地方快速地插入与删除。它的每个元素间用指针相连,不能随机访问。
为了访问表容器中特定的元素,需要循环访问。
list的主要方法有:
方法 | 用法 |
---|---|
size() | 返回表中实际元素个数 |
empty() | 判断表是否为空 |
push_back(x) | 在表尾部插入元素,即尾插法 |
push_front() | 在表首部插入元素,头插法 |
// 特别说明:如果链表中的数据时结构体类型,那么赋值方法为,先定义一个结构体变量x,然后push_back(x)
方法 | 用法 |
---|---|
pop_back() | 删除最后一个元素 |
remove(elem) | 删除所有指定值的元素 |
erase(pos) | 从容器中删除一个或几个元素,参数为某个元素地址 |
clear() | 删除所有的元素 |
insert(pos,elem) | 在pos处插入elem并返回该元素的位置,elem可以是一段元素 |
begin() | 引用容器中的第一个元素的位置 |
end() | 引用容器中最后一个元素后面的一个位置 |
sort() | 进行排序 |
// 特别说明:如果链表中数据为结构体,想要以结构体中某一值进行排序,需要定义一个重构函数
# 代码示例:
bool Comp(Poly p1, Poly p2) // 定义的重构函数,
{
if (p1.exp <= p2.exp) // 小于为真,所以是递增排序,反之亦然,其中Poly是结构体,exp是结构体成员
return true;
else
return false;
}
void sort(list<Poly> &p)
{
p.sort(Comp); // 以exp的值进行排序的链表
}
list容器使用基础代码示例:
#include <iostream>
#include <list>
#include <cstdio>
using namespace std;
int main()
{
list<int> lst; // 建立一个整数表对象
list<int>::iterator i, start, end;
for (int k = 1; k < 8; k++)
lst.push_back(k); // 对每个元素赋值
printf("list:");
for (i = lst.begin(); i != lst.end(); i++) // i是一个整数列表中的元素指针,先取开头位置,直到最后一个位置
printf("%6d", *i);
putchar('\n');
putchar('\n');
i = lst.begin();
start = ++lst.begin(); // 指向第二个元素
end = --lst.end(); // 指向最后一个元素
lst.insert(i, start, end); // 将start到end-1的元素插入到i的位置
printf("lst.insert(i,start,end)\n");
printf("list:");
for (i = lst.begin(); i != lst.end(); i++)
printf("%6d", *i);
putchar('\n');
putchar('\n');
printf("lst.size()\n");
printf("此时链表中元素个数为%d\n\n", lst.size());
printf("lst.pop_back()\n");
lst.pop_back();
printf("list:");
for (i = lst.begin(); i != lst.end(); i++)
printf("%6d", *i);
putchar('\n');
putchar('\n');
printf("lst.remove(2)\n");
lst.remove(2);
printf("list:");
for (i = lst.begin(); i != lst.end(); i++)
printf("%6d", *i);
putchar('\n');
putchar('\n');
printf("lst.erase(lst.begin)\n");
lst.erase(lst.begin());
printf("list:");
for (i = lst.begin(); i != lst.end(); i++)
printf("%6d", *i);
putchar('\n');
putchar('\n');
return 1;
}
多项式的相乘运算
举例:实现两个多项式相乘运算,用单链表存储一元多项式,并实现两个多项式相乘运算
首先创建头文件 "linklist.h"
//单链表基本运算算法
#include <stdio.h>
#include <malloc.h>