初学栈&洛谷【验证栈序列】题解

栈是编程中常用的一种数据结构,十分的重要。经过对栈的初步学习,我已经对栈有了一定的了解。

首先栈是一种具有后进先出(LIFO)特性的数据结构(最后进入栈的元素第一个被移除),这一特性使得栈在许多算法和问题中非常有用,比如括号匹配、函数调用等。

然后对栈的基本操作大概有四种:压栈(push)、弹栈(pop)、查看栈顶元素(peek)以及判断栈是否为空(isEmpty)。掌握这四种基本操作是运用栈的必要基础。

最后我还运用栈在洛谷解决了一道作业题【验证栈序列】

原题在此-->P4387 【深基15.习9】验证栈序列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目描述n

给出两个序列 pushed 和 poped 两个序列,其取值从 1 到n(n≤100000)。已知入栈序列pushed,如果出栈序列有可能是 poped,则输出 Yes,否则输出 No。为了防止骗分,每个测试点有多组数据。

输入格式

第一行一个整数 q,询问次数。

接下来 q 个询问,对于每个询问:

第一行一个整数 n 表示序列长度;

第二行 n 个整数表示入栈序列;

第三行 n 个整数表示出栈序列;

输出格式

对于每个询问输出答案。

输入输出样例

输入 #1

2
5
1 2 3 4 5
5 4 3 2 1
4
1 2 3 4
2 4 1 3

输出 #1

Yes
No

源代码

#include
#define MAX_SIZE 100010

int stack[MAX_SIZE],a[MAX_SIZE],b[MAX_SIZE];
int top=-1;

void push(int x)
{
    stack[++top]=x;
}

void pop()
{
	top--;
}

int main()
{
	int T;
	scanf("%d",&T);
	for(int i=0;i

整体思路就是模拟一遍判断出栈操作是否合理。

你可能感兴趣的:(c语言,数据结构)