输入 2 组数,用编程判断后者能否作为前者的出栈顺序。例如先输入 12345 ,再输入 32145 就输出 yes 。如果后
者是 31245 就输出 no 。
完整的代码:
#include "stdio.h"
#include<stdbool.h>
#define maxsize 50
typedef int datatype;
//Sequence Stack 实现顺序栈,使用数组来实现
struct stack
{
datatype data[maxsize];
int top;
};
typedef struct stack Stack;
//创建栈
// Stack s;
//初始化栈
void init(Stack *s)
{
s->top=-1;
}
//判断栈是否为空
bool Empty(Stack *s)
{
if(s->top==-1)
{
return true;
}
else
{
return false;
}
}
//判断栈是否已满了
bool full(Stack *s)
{
if(s->top==maxsize-1)
{
return true;
}
else
{
return false;
}
}
//入栈
void Push(Stack *s,datatype element)
{
if(!full(s))
{
s->top++;
s->data[s->top]=element;
}
else
{
printf("栈满\n");
}
}
//出栈
int Pop(Stack *s)
{
int number;
if(!Empty(s))
{
number=s->data[s->top];
s->top--;
return number;
}
else
{
printf("栈空\n");
return -1;
}
}
int Top(Stack *s){
int number;
if(!Empty(s))
{
number=s->data[s->top];
return number;
}
return 0;
}
int length(int a[])
{
int i=0;
while(a[i]!=0)
i++;
return i;
}
int main()
{
Stack p;
Stack *s;
s=&p;
int c,str1,str2,tmp,i=0;
int a[20]={0};
int b[20]={0};
init(s);
printf("请输入一组数字用0作为结束符:\n");
scanf("%d",&c);
while(c!=0){
a[i]=c;
i++;
scanf("%d",&c);
}
printf("请输入出栈的顺序:\n");
i=0;
scanf("%d",&c);
while(c!=0){
b[i]=c;
i++;
scanf("%d",&c);
}
printf("\n#######################################\n");
str1=str2=0;
while(str2<length(b)&&str1<length(a))
{
//如果栈不为满且a还有未入栈元素则入栈
if(!full(s)&&str1<length(a)){
tmp=a[str1];
Push(s,tmp);
str1++;
}
//出栈
while(Top(s)!=0&&Top(s)==b[str2]){
Pop(s);
str2++;
}
}
printf("----------------------------\n");
if(Empty(s)){
printf("是出栈的顺序\n");
}
else{
printf("不是出栈的顺序\n");
}
return 0;
}