给出入栈顺序1,2,3,4,……n,问某个出栈序列是否合法
int main()
{
int n;
while (scanf("%d", &n) == 1 && n) {
int i;
int d[10000];
int k, x;
while (scanf("%d", &x) == 1 && x) {
d[0] = x;
for (i = 1; i < n; ++i)
scanf("%d", &d[i]);
stack<int> s;
int index = 1;
for (i = 0; i < n; ++i) {
if ((!s.empty()) && d[i] == s.top()) {
s.pop();
} else if ((!s.empty()) && d[i] != s.top()) {
if (d[i] == index) {
++index;
} else {
--i;
if (index > n) break;
s.push(index);
++index;
}
} else if (s.empty()) {
if (index > n) break;
s.push(index);
++index;
--i;
}
}
if (i == n) printf("Yes\n");
else printf("No\n");
}
printf("\n");
}
return 0;
}
本文提供了一个程序,用于检查给定的入栈序列是否能够产生合法的出栈序列。
(POJ-1363数据结构之栈)&spm=1001.2101.3001.5002&articleId=7086668&d=1&t=3&u=5e15749ea6cc4b86a7abb069ba497dc3)
432

被折叠的 条评论
为什么被折叠?



