题目描述 现有一个空栈ss和一个正整数nn,将1,2,3,...,n1,2,3,...,n依次入栈,期间任意时刻出栈。然后给定一个出栈序列,问其是否是一个合法的出栈序列。 输入描述 第一行一个整数nn(1≤n≤1001≤n≤100),表示需要入栈的整数个数; 第二行为[1,n][1,n]的一个排列,表示一个出栈序列,整数间用空格隔开。 输出描述 如果出栈序列合法,那么输出Yes,否则输出No。 用c语言
时间: 2024-02-01 13:15:45 浏览: 115
SS_TDMA系统的一个高效时隙编排算法.pdf
以下是用C语言实现的代码:
```c
#include <stdio.h>
#define MAX_SIZE 101
int stack[MAX_SIZE]; // 定义栈
int top = -1; // 栈顶指针
void push(int x) {
stack[++top] = x; // 将元素入栈
}
int pop() {
return stack[top--]; // 将栈顶元素出栈
}
int main() {
int n;
scanf("%d", &n); // 输入整数个数
int arr[n];
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]); // 输入出栈序列
}
int j = 0;
for (int i = 1; i <= n; i++) {
push(i); // 将1~n依次入栈
while (top != -1 && stack[top] == arr[j]) { // 如果栈不为空且栈顶元素等于出栈序列的当前元素
pop(); // 将栈顶元素出栈
j++; // 指向下一个出栈元素
}
}
if (top == -1) {
printf("Yes\n"); // 栈为空,说明出栈序列合法
} else {
printf("No\n"); // 栈不为空,说明出栈序列不合法
}
return 0;
}
```
该算法的时间复杂度为$O(n)$,空间复杂度为$O(n)$。
阅读全文