合法性判断
代码实现
#include<stdio.h>
#include<stdlib.h>
#define Maxsize 7
typedef struct stack{
int data[Maxsize];
int top;
}Stack;
typedef struct quere{
int data[Maxsize];
int rear,front;
}Quere;
void InitStack(Stack &s){
s.top = -1;
}
void InitQuere(Quere &q){
q.front = q.rear = 0;
}
bool pushstack(Stack &s,int data){
if(s.top == Maxsize-1){
return false;
}
s.data[++s.top] = data;
return true;
}
bool insertQuere(Quere &q,int data){
if((q.rear+1)%Maxsize == q.front){
return false;
}
q.data[q.rear] = data;
q.rear = (q.rear+1)%Maxsize;
return true;
}
bool Pop(Stack &s,int &x){
if(s.top == -1 ){
return false;
}
x = s.data[s.top--];
return true;
}
bool DeQuere(Quere &q,int &x){
if((q.rear+1)%Maxsize == q.front){
return false;
}
x = q.data[q.front];
q.front = (q.front+1)%Maxsize;
return true;
}
bool GetTopData(Stack &s,int &x){
if(s.top == -1){
return false;
}
x = s.data[s.top];
return true;
}
bool GetHead(Quere &q,int &x){
if(q.front == q.rear){
return false;
}
x = q.data[q.front];
return true;
}
bool Istrue(Stack &s,int a1[],Quere &q){
int x,d;
for(int i=0;i<5;i++){
pushstack(s,a1[i]);
GetHead(q,x);
GetTopData(s,d);
while(s.top != -1 && x == d){
Pop(s,d);
DeQuere(q,x);
GetHead(q,x);
GetTopData(s,d);
}
}
if(s.top == -1)
return true;
else
return false;
}
int main(){
Stack s;
Quere q;
InitStack(s);
InitQuere(q);
int a1[5] = {1,2,3,4,5};
insertQuere(q,2);
insertQuere(q,3);
insertQuere(q,5);
insertQuere(q,4);
insertQuere(q,1);
if(Istrue(s,a1,q)){
printf("true");
}else
{
printf("false");
}
}