杭电 POJ 1022题,火车入站出站顺序
#include<stdio.h>#include<stdlib.h>
#include<string.h>
#define Stack_Size 100
#define Stack_Inc_Size 10
typedef struct{
char *top,*base;
int length;
}QStack;
int InitStack(QStack &Q)
{
Q.base=(char *)malloc(Stack_Size*sizeof(char));
if(!Q.base) return 0;
Q.top=Q.base;
Q.length=Stack_Size;
return 1;
}
int Push(QStack &Q,char e)
{
if(Q.top-Q.base>=Q.length){
Q.base=(char *)realloc(Q.base,(Stack_Size+Stack_Inc_Size)*sizeof(char));
if(!Q.base) return 0;
Q.top=Q.base+Q.length;
Q.length+=Stack_Inc_Size;
}
*Q.top++;
*Q.top=e;
return 1;
}
int Pop(QStack &Q,char &e)
{
if(Q.top==Q.base) return 0;
e=*Q.top;
*Q.top--;
return 1;
}
int GetTop(QStack &Q,char &e)
{
if(Q.top==Q.base) return 0;
e=*Q.top;
return 1;
}
int StackEmpty(QStack &Q)
{
if(Q.top==Q.base) return 1;
return 0;
}
void ClearStack(QStack &Q)
{
int i;
for(i=0;i<Q.length;i++){
*(Q.top-i)=0;
}
}
int main()
{
bool F;
QStack Q;
char str1[10],str2[10],e1,e2;
int i,k,r,n,j;
InitStack(Q);
while(scanf("%d",&n)!=EOF){
scanf("%s %s",str1,str2);
F=true;
for(i=0;i<n-1;i++){
if(i==0){
if(str2[i+1]<str2[i]&&str2[i+1]<str2[i+2]&&str2[i+2]<str2[i]) F=false;
}
else{
if(str2[i]<str2[i-1]&&str2[i]<str2[i+1]&&str2[i-1]>str2[i+1]) F=false;
}
}
if(F==false) printf("No.\n");
else{
if(!StackEmpty(Q)) ClearStack(Q);
printf("Yes.\n");
Push(Q,str1[0]);
printf("in\n");
k=1,r=0;
j=2*n;
while(1){
GetTop(Q,e1);
if(e1!=str2[r]){
Push(Q,str1[k]);
printf("in\n");
k++;
}
else Pop(Q,e2),printf("out\n"),r++;
if(r==n&&k==n) break;
}
}
printf("FINISH\n");
}
return 0;
}
这个代码交上去 老是RE,求大神 解答