stack栈、queue队列、list链表容器

news2024/12/28 20:46:01

目录

stack栈容器

stack概念和定义

stack构造函数:

stack数据操作:

queue队列容器

queue概念和定义

queue构造函数

queue数据操作

list链表容器

list概念和定义

list构造函数

list赋值和交换

list大小操作

list插入和删除

list数据储存

list反转和排序


stack栈容器

stack概念和定义

栈的数据结构特性是:先入后出,后入先出,只能从栈顶插入、删除和访问。可将栈视为一叠盘子,最后叠上去的盘子首先被取下来,而不能从中间或底部取出盘子。

stack构造函数:

stack<T>stk;//stack采用模板类实现,stack对象的默认构造形式

stack(const stack &stk);//拷贝构造函数

stack数据操作:

stack& operator=(const stack &stk);//重载等号操作符

push(elem);//向栈顶添加元素

pop();//从栈顶移除第一个元素

top();//返回栈顶元素

stack大小操作:

empty();//判断堆栈是否为空

size(0);//返回栈的大小

#include <iostream>
#include <string.h>
#include <iterator>
#include <vector>
#include <string>
#include <algorithm>
#include <deque>
#include <bitset>
#include <ctime>
#include <stack>
using namespace std;

void test()
{
    stack<int> s;
    s.push(10);
    s.push(20);
    s.push(30);
    s.push(40);
    cout<< "栈的大小为:"<< s.size() << endl;
    while(!s.empty())//判断栈是否为空
    {
        cout << "栈顶元素为:" << s.top()<<  endl;
        s.pop();//移除栈顶元素
    }

    cout<< "栈的大小为:"<< s.size() << endl;
}

int main()
{
    test();

    return 0;
}

编译运行

queue队列容器

queue概念和定义

队列的数据结构特性是:先进先出,允许在开头删除,在末尾插入,类似排队系统。

队列容器允许从一端新增元素,从另一端移除元素

队列中只有对头和队尾才可以被外界使用,因此队列不允许有遍历行为

队列中进数据称为入队,出数据称为出队

queue构造函数

queue<T> que;//queue采用模板类实现,queue对象的默认构造形式

queue(const queue &que); //拷贝构造函数

queue数据操作

queue& operator=(const queue &que); //重载等号操作符

push(elem);//往队尾添加元素

pop();//从队头移除第一个元素

back();//返回最后一个元素

front();//返回第一个元素

empty();判断是否尾空

size();//返回大小

#include <iostream>
#include <string.h>
#include <iterator>
#include <vector>
#include <string>
#include <algorithm>
#include <deque>
#include <bitset>
#include <ctime>
#include <stack>
#include <queue>
using namespace std;

void test()
{
	queue<int> q;
	q.push(10);
	q.push(20);
	q.push(30);
	q.push(40);
	
	
	while(!q.empty())//判断栈是否为空
	{
		cout << "对头元素为:" << q.front()<< endl;
		
		cout << "对尾元素为:" << q.back()<< endl;
		
		q.pop();//移除队头
	}
	cout<< q.size() << endl;
}

int main()
{
	test();

	return 0;
}

编译运行

list链表容器

list概念和定义

list是双向链表的一个泛化容器,它的数据元素可通过链表指针串接成逻辑意义上的线性表。不同于采用线性表顺序存储结构的vector和deque容器,list双向链表中任一位置的元素查找、插入和删除,都具有高效的常数阶算法时间复杂度

list的优点:
        采用动态存储分配,不会造成内存浪费和溢出
        链表执行插入和删除操作十分方便,修改指针即可,不需要移动大量元素list的缺点:
        链表灵活,但是空间(指针域)和时间(遍历) 额外耗费较大List有一个重要的性质,插入操作和删除操作都不会造成原有list迭代器的失效,这在vector是不成立的.

list构造函数

list<T>lst;//list采用采用模板类实现,对象的默认构造形式:
list(beg,end);//构造函数将[beg,end)区间中的元素拷贝给本身
list(n,elem);//构造函数将n个elem拷贝给本身。
list(const list &lst);//拷贝构造函数。

#include <iostream>
#include <string.h>
#include <iterator>
#include <vector>
#include <string>
#include <algorithm>
#include <deque>
#include <bitset>
#include <ctime>
#include <stack>
#include <queue>
#include <list>
using namespace std;

void print(const list<int>&L)
{
	for(list<int>::const_iterator it = L.begin();it!=L.end();it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

void test()
{

	list<int>L1;
	L1.push_back(10);
	L1.push_back(20);
	L1.push_back(30);
	L1.push_back(40);
	print(L1);
	
	list<int>L2(L1.begin(),L1.end());
	print(L2);

	list<int>L3(L2);
	print(L3);
	
	list<int>L4(10,40);
	print(L4);
	

}

int main()
{
	test();

	return 0;
}

编译运行

list赋值和交换

assign(beg,end);//将[begend)区间中的数据拷贝赋值给本身
assign(n,elem);//将n个elem拷贝赋值给本身。
list& operator=(const list &lst);//重载等号操作竹
swap(lst)://将lst与本身的元素互换

void print(const list<int>&L)
{
    for(list<int>::const_iterator it = L.begin();it!=L.end();it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}

void test()
{

    list<int>L1;
    L1.push_back(10);
    L1.push_back(20);
    L1.push_back(30);
    L1.push_back(40);
    print(L1);

    list<int>L2(10,40);
    print(L2);

    cout << "交换后: "<< endl;
    L2.swap(L1);

    print(L1);
    print(L2);

}

编译运行

list大小操作

size();//返回容器中的个数
empty();//判断容器是否为空
resize(num);//重新指定容器的长度为num,若容器变长,则以默认值填充新位置
                      //如果容器变短,则末尾超出容器长度的元素被制除。
resize(num,elem);//重新指定容器的长度为num,若容器变长,则以elem值填充新位置                                                //如果容器变短,则末尾超出容器长度的元素被删除。

list插入和删除

        push_back(elem);//在容器尾部加入一个元素
        pop_back0)://删除容器中最后一个元素
        push front(elem)://在容器开头插入一个元妻
        pop_front()://从容器开头移除第一个元素
        insert(pos,elem)://在pos位置插elem元素的拷贝,返回新数据的位置
        insert(pos,n,elem)://在pos位置插入n个elem数据,无返回值
        insert(pos,beg,end);//在pos位置插入[begend)区间的数据,无返回值
        clear();//移除容器的所有数据
        erase(beg,end)://删除[begend)区间的数据,返回下一个数据的位置
        erase(pos)://删除pos位置的数据,返回下一个数据的位置
        remove(elem)://删除容器中所有与elem值匹配的元素

list数据储存

front();//返回第一个元素

back();//返回最后一个元素

void test()
{
    list<int> L1;
    L1.push_back(10);
    L1.push_back(20);
    L1.push_back(30);
    L1.push_back(40);

    cout << "第一个元素: " << L1.front() << endl;
    cout << "最后一个元素: " << L1.back() << endl;

    //L1[0]不可以用[]访问list容器的元素

    //L1.at(0) 不可以用at方式访问list容器里的元素

    //原因是list本质链表 不是用连续线空间存储数据,迭代器也不支持随机访问
    list<int>::iterator it = L1.begin();

    it++;//支持双向
    it--;
//  it = it + 1;//不支持随机访问
}

list反转和排序

reverse();//反转链表

sort();//链表排序(成员函数)

#include <iostream>
#include <string.h>
#include <iterator>
#include <vector>
#include <string>
#include <algorithm>
#include <deque>
#include <bitset>
#include <ctime>
#include <stack>
#include <queue>
#include <list>
using namespace std;

void print(const list<int>&L)
{
	for(list<int>::const_iterator it = L.begin();it!=L.end();it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

bool myc(int v1,int v2)
{
    //降序 就让第一个数大于第二个数
    return v1 > v2;
}


void test01()
{
	list<int>L1;
	L1.push_back(20);
	L1.push_back(10);
	L1.push_back(40);
	L1.push_back(30);
	L1.push_back(70);

	print(L1);

	L1.reverse();
	print(L1);
}

void test02()
{
	list<int>L1;
	L1.push_back(20);
	L1.push_back(10);
	L1.push_back(40);
	L1.push_back(30);
	L1.push_back(70);

	print(L1);

	//所有不支持随机访问迭代器的容器,不可以用标准算法
	//不支持随机访迭代器的容器,内部会提供对应的一些算法
	//sort(L1.begin(),L1.end());
	L1.sort();
	print(L1);

    //L1.sort(myc);降序排列

}

int main()
{
	test01();
	cout << endl;
	test02();
	return 0;
}

编译运行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1036113.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年汉字小达人区级比赛倒计时2天,最新问题解答和真题练一练

今天是9月23日&#xff0c;距离2023年第十届汉字小达人区级比赛&#xff08;初赛&#xff09;的自由报名参赛时间还有2天&#xff0c;六分成长结合家长和小朋友们问的比较多的问题进行解答&#xff0c;并提供一些真题供大家练习、了解比赛题型和规则。 问题1&#xff1a;2023年…

WPS文件找回怎么做?文件恢复,4个方法!

“我平时习惯了用wps来记录一些工作心得或重点&#xff0c;不知道什么原因&#xff0c;有些很重要的文件莫名不见了&#xff0c;有什么方法可以帮我找回wps文件吗&#xff1f;” wps作一个常用的办公软件&#xff0c;有效的提高了我们的工作效率。在日常使用wps时&#xff0c;可…

学信息系统项目管理师第4版系列10_变更管理与文档管理

1. 文档管理 1.1. 分类 1.1.1. 开发文档 1.1.1.1. 描述开发过程本身 1.1.1.2. 可行性研究报告和项目任务书、需求规格说明、功能规格说明、设计规格说明&#xff08;包括程序和数据规格说明、开发计划、软件集成和测试计划、质量保证计划、安全和测试信息等&#xff09; 1…

maven中relativepath标签的含义

一 relative标签的含义 1.1 作用 这个<parent>下面的<relativePath>属性&#xff1a;parent的pom文件的路径。 relativePath 的作用是为了找到父级工程的pom.xml;因为子工程需要继承父工程的pom.xml文件中的内容。然后relativePath 标签内的值使用相对路径定位…

学习自定义SpringBoot Starter组件 (超详细的图文教程,从理论到实战)

前言&#xff1a; 通过这篇文章 你能了解SpringBoot Starter的概念和用处 并且通过实战 自定义一个SpringBoot Starter 来实现数据脱敏的功能 加油 搬砖人~ 今天不学习&#xff0c;明天变垃圾。 一、什么是SpringBoot Starter&#xff1f;用SpringBoot Starter能带来什么好处…

【04】FISCOBCOS扩容新节点

官方文档https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/tutorial/add_new_node.html 为节点生成证书并启动 每个节点都需要有一套证书来与链上的其他节点建立连接,扩容一个新节点,首先需要为其签发证书。为新节点生成私钥证书 接下来的操作都在nodes/…

MQ---第一篇

系列文章目录 文章目录 系列文章目录一、简述RabbitMQ的架构设计二、RabbitMQ如何确保消息发送 ? 消息接收?一、简述RabbitMQ的架构设计 Broker:rabbitmq的服务节点 Queue:队列,是RabbitMQ的内部对象,用于存储消息。RabbitMQ中消息只能存储在队列中。生产 者投递消息到队…

百度SEO优化的技巧大全(全面掌握SEO优化方法)

百度优化SEO内容优化介绍 为了提高网站在百度搜索结果中的排名&#xff0c;需要进行百度SEO优化&#xff0c;其中内容优化是非常重要的一环。内容优化包括网站结构、网页质量、关键词密度等方面。首先&#xff0c;网站结构应该简洁清晰&#xff0c;方便用户导航和搜索引擎爬虫…

LeetCode_二叉树_中等_1448.统计二叉树中好节点的数目

目录 1.题目2.思路3.代码实现&#xff08;Java&#xff09; 1.题目 给你一棵根为 root 的二叉树&#xff0c;请你返回二叉树中好节点的数目。「好节点」X 定义为&#xff1a;从根到该节点 X 所经过的节点中&#xff0c;没有任何节点的值大于 X 的值。 示例 1&#xff1a; 输…

【AI视野·今日NLP 自然语言处理论文速览 第三十九期】Fri, 22 Sep 2023

AI视野今日CS.NLP 自然语言处理论文速览 Fri, 22 Sep 2023 Totally 59 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers LongLoRA: Efficient Fine-tuning of Long-Context Large Language Models Authors Yukang Chen, Shengju Qia…

基于若依ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(八)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 这个部分是这个单元最后内容了&#xff0c;就是点击消息更多的一些代码与逻辑。 1、需要在我的个人中心里…

Plant Simulation 与Web交互 V3.0工具

Plant Simulation WebTool V3.0工具&#xff0c;仅需简单设置&#xff0c;web与Plant Simulation可以双向通信&#xff0c;Web端可以缩放、旋转、平移操作 WebTool 工具

软件测试笔试

作者&#xff1a;爱塔居 专栏&#xff1a;软件测试 文章简介&#xff1a;记录了我在笔试、面试过程中遇见的一些小问题 1.软件的生命周期&#xff1a;需求分析、计划、设计、编码、测试、运行维护 2.软件测试的生命周期&#xff1a;需求分析、测试计划、测试设计/开发、测试执…

Vue.js 2—插槽 Slots

我们已经了解到组件能够接收任意类型的 JavaScript 值作为 props &#xff0c;但组件要如何接收模板内容呢? 在某些场景中&#xff0c;我们可能想要为子组件传递一些模板片段&#xff0c;让子组件在它们的组件中渲染这些片段。 此处&#xff0c;传递的是标签结构而不再是数据…

libpcap之PF_PACKET协议族

一、kernel中PF_PACKET协议族注册 af_packet.c module_init(packet_init);static int __init packet_init(void) {int rc proto_register(&packet_proto, 0);if (rc ! 0)goto out;sock_register(&packet_family_ops);register_pernet_subsys(&packet_net_ops);r…

威胁追踪如何增强您的网络安全态势

网络威胁的复杂性、频率和影响正在加剧。2022 年&#xff0c;勒索软件攻击达到2.361 亿次&#xff0c;其中 39% 的英国企业遭受网络攻击。 这些攻击需要工具和资源来识别和纠正漏洞&#xff0c;以在云环境中维护强大的安全框架&#xff0c;从而降低数据泄露和合规违规的风险。…

SpringCloud Alibaba - Sentinel篇

一、Sentinel快速入门 Sentinel官网地址&#xff1a;https://sentinelguard.io/zh-cn/index.html Sentinel项目地址&#xff1a;https://github.com/alibaba/Sentinel Sentinel是阿里巴巴开源的一款微服务流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量限流、熔…

计算机组成原理之初识计算机硬件,帮你拆开电脑看看里面的组成!!!

大家好&#xff0c;欢迎阅读《计算机组成原理》的系列文章&#xff0c;本系列文章主要教内容是从零学习计算机组成原理&#xff0c;内容通俗易懂&#xff0c;大家好好学习吧&#xff01;&#xff01;&#xff01; 更多的优质内容&#xff0c;请点击以下链接查看哦~~ ↓ ↓ ↓ …

Java实验案例(一)

目录 案例一&#xff1a;买飞机票 案例二&#xff1a;开发验证码 案例三&#xff1a;评委打分 案例四&#xff1a;数字加密 案例五&#xff1a;数组拷贝 案例六&#xff1a;抢红包 案例七&#xff1a;找素数的三种方法 案例八&#xff1a;打印乘法口诀表 案例九&#x…

若依微服务如何处理Long类型精度丢失问题?

当字段实体类为Long类型且值超过前端js显示的长度范围时会导致前端回显错误。 目录 1、ruoyi-common-security模块添加JacksonConfig配置全局序列化 2、增加指定配置类信息