【c++入门(2)】队列和栈

本文介绍了数据结构中的队列和栈的基本概念及操作实例,包括队列的FIFO特性与循环队列的应用,以及栈的后进先出原则。此外,还探讨了C++标准模板库(STL)中的`deque`和`stack`,并通过矩阵链乘问题展示了它们在算法中的应用,帮助理解这些数据结构在实际问题解决中的作用。
摘要由CSDN通过智能技术生成

一、队列
队列是zhi’yun’xu’zai一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种线性表,简称FIFO。最早进入队列的元素最早离开。允许插入的一端叫做“队尾”,允许删除的一端叫做“队头”。

shi意图:
在这里插入图片描述接下来画几张图
在这里插入图片描述
在这里插入图片描述
操作si例:
在这里插入图片描述
在这里插入图片描述
现在来看看它的另一面
在这里插入图片描述
这个时候我们就可以使用循环队列啦
在这里插入图片描述
接下来我们简单认识一下循环队列的基本操作
在这里插入图片描述
二、栈
在这里插入图片描述
在这里插入图片描述
老样子,我们来看看栈的实现与操作
在这里插入图片描述
在这里插入图片描述
三、STL
queue我们已经学了,我就不讲了。这次我们来学习stack和deque
1.deque
在这里插入图片描述
2.stack
在这里插入图片描述来写一道题练练手:

矩阵链乘[Matrix Chain Multiplication,UVa442]
题目描述

假设你需要计算一个表达式A*B*C*D*E,其中A B C D E都是矩阵。由于矩阵的乘法是关联的,所以乘法执行的顺序是任意的,然而,所需要的乘法的次数很大程度上是取决于表达式的执行顺序。

例如:假设A是50*10的矩阵,B是10*20的矩阵,C是20*5的矩阵,计算A*B*C一共有两种策略,一种是(A*B)*C,另一种是A*(B*C),第一种的表达式的乘法次数是15000,而第二种的乘法次数是3500.

注解:

假定A是m*n矩阵,B是n*p矩阵,那么AB是m*p矩阵,乘法次数是m*n*p,如果A的列数不等于B的行数,则乘法无法进行


你的任务是,编写一个程序,计算并输出给定的一些矩阵链乘表达式所需要的乘法次数。
输入格式

输入包括两部分,第一部分列举出矩阵的名称和维度,第二部分列举出矩阵链乘的表达式。

第一部分:

第一行是一个整数N,1≤N≤26,表示第一部分中矩阵的个数

接下来N行,每行包含一个大写字母和两个整数,用空格隔开,其中大写字母表示矩阵的名称如A B C...,两个整数分别表示这个矩阵的行数和列数

第二部分:

给出矩阵链乘的表达,一行一个表达式,表达式的格式参考输入样例。
输出格式

对于输入文件的第二部分的链乘表达式,每个表达式输出一行

如果表达式无法进行乘法,输出一行“error”,否则输出表达式所需要的乘法次数
输入输出样列
输入样例19
A 50 10
B 10 20
C 20 5
D 30 35
E 35 15
F 15 5
G 5 10
H 10 20
I 20 25
A
B
C
(AA)
(AB)
(AC)
(A(BC))
((AB)C)
(((((DE)F)G)H)I)
(D(E(F(G(HI)))))
((D(EF))((GH)I))

输出样例10
0
0
error
10000
error
3500
15000
40500
47500
15125

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

{∞}

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值