#include<stdio.h>
#include<stdlib.h>
#define ERROR 0
#define OK 1
typedef char ElemType;
typedef int Status;
typedef struct{
ElemType *base;
ElemType *top;
//int stacksize;
}SqStack;
//初始化栈
Status InitStack(SqStack &S){
S.base=(ElemType*)malloc(sizeof(SqStack));
if(!S.base)return ERROR;
S.top=S.base;
return OK;
}
//入栈
Status Push(SqStack &S,ElemType e){
S.top=&e;
S.top++;
return OK;
}
//出栈
Status Pop(SqStack &S,ElemType &e){
if(S.top==S.base)return ERROR;
S.top--;
e=*S.top;
return e;
}
//获取栈顶元素
Status getTop(SqStack &S,ElemType &e){
if(S.top==S.base)return ERROR;
e=*(S.top-1);
return e;
}
//清空栈
void clear(SqStack &S){
while(S.top!=S.base)
S.top--;
}
//求链栈长度
Status StackLength(SqStack &S){
ElemType *p=S.base;
int i=0;
while(p!=S.top){
i++;
p++;
}
return i;
}
//输入出栈序列
void input(int *arr,int N){
for(int i=0;i<N;i++){
scanf("%d",&arr[i]);
}
}
//初始化入栈序列
void InitInstack(int *instack,int N){
for(int i=0;i<N;i++){
instack[i]=i+1;
}
}
void Judge(int *instack,int *outstack,int M,int N,int K){
SqStack S;
int result[N];
instack=(int*)malloc(sizeof(int)*N);
outstack=(int*)malloc(sizeof(int)*N);
for(int i=0;i<K;i++){
clear(S);
InitStack(S);//每循环一次都要重新对栈进行初始化
InitInstack(instack,N);//初始化入栈序列
printf("ruzhanxvlie\n");
input(outstack,N);//每循环一次都对出栈序列重新赋值
printf("in\n");
while(*instack!='\0'){
printf("in1\n");
Push(S,*instack);
if(StackLength(S)>M){
//printf("overflow\n");
//printf("%d\n",StackLength(S));
break;
}
else{
ElemType top;
getTop(S,top);
while(top==*outstack){
Pop(S,top);
outstack++;
getTop(S,top);
}
instack++;
}
}
if(*outstack=='\0')//当出栈序列为空,即该序列已被全部访问完
result[i]=1;
else
result[i]=0;
}
//输出每一个出栈序列的结果
for(int i=0;i<K;i++){
if(result[i]==1)
printf("YES\n");
else if(result[i]==0)
printf("NO\n");
}
}
出栈顺序合法性判断
最新推荐文章于 2023-11-06 16:48:59 发布