用数组模拟栈和队列

先进后出

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

//stk 表示定义的栈
//tt表示栈顶的下标
int stk[N], tt = 0;

//在栈顶上加入一个新的元素
stk[++ tt] = x;

//弹出
tt --;

//判断栈是否为空
if (tt > 0) 不为空
else empty

//取出栈顶
stk[tt];
1.题目

给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 − 1。

输入格式

第一行包含整数 N ,表示数列长度。

第二行包含 N 个整数,表示整数数列。

输出格式

共一行,包含 N 个整数,其中第 i 个数表示第 i 个数的左边第一个比它小的数,如果不存在则输出 − 1 。

数据范围

1≤N≤10^5

1≤数列中元素≤10^9

所有操作保证合法。 所有操作保证合法。所有操作保证合法。

输入样例:

5
3 4 2 7 5

输出样例:

-1 3 -1 2 2

也就是说栈里面的数 不能大于新插入的元素

#include <iostream>

using namespace std;
const int N = 100010;
int stk[N], tt = 0;


int main()
{
	int n;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		int x;
		cin >> x;
		while (tt != 0 && stk[tt] >= x) tt--;
		if ( tt ) cout << stk[tt] << " ";
		else cout << " -1 " << " ";

		stk[++tt] = x;
	}

	return 0;
}

队列

先进先出:队尾插入元素,队头弹出元素

在这里插入图片描述

1、普通队列

// q[] 表示队列
// hh 表示队头,tt表示队尾
int q[N], hh = 0, tt = -1;

// 向队尾插入一个数
q[ ++ tt] = x;

//弹出
hh ++;

//判断队列是否为空
if (hh <= tt) 不为空
else 为空

//取出队头元素
q[hh];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

少年负剑去

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

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

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

打赏作者

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

抵扣说明:

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

余额充值