‘C语言’ | STL库链表容器简介,结构体为数据类型及依据list容器结构体数据的某个值的排序方法,以多项式相乘运算求解为例,算法基于传统单链表与STL库链表容器的算法

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>
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值