问题
一个栈的进栈序列是a,b,c,d,e,判断栈的输出序列的合法性:
A.edcba B.decba C.dceab D.abcde
思路
先把入栈序列中的元素标定序号1,2,3,…
则出栈序列中的每个元素后面的序号比它小的元素,其序号是按递减排列的。
代码
#include <stdio.h>
#include <string.h>
#define MAXLINE 10
typedef struct node {
char s[MAXLINE];
int order;
}Node;
//得到元素在入栈序列中的索引
int order(Node s[], char str[], int n)
{
int i;
for (i = 0; i < n; i++) {
if (strcmp(str, s[i].s) == 0)
return i;
}
}
int main()
{
int i = 0, j, n1 = 0, n2 = 0; //n1为入栈元素个数, n2为出栈元素个数
int cur1, cur2; //判断递减
Node s1[100];
Node s2[100];
//读取一行不知道个数的入栈序列
printf("请输入入栈序列 : ");
while (1) {
scanf("%s", &s1[i].s);
s1[i].order = i;
i++;
n1++;