}
}
) ) ) )
g[CurPos、x+1][CurPos、y]、Color==OldColor
Push(s,g[CurPos、x+1][CurPos、y]); !g[CurPos、x-1][CurPos、y]、Visited && g[CurPos、x-1][CurPos、y]、Color==OldColor Push(s,g[CurPos、x-1][CurPos、y]); !g[CurPos、x][CurPos、y+1]、Visited && g[CurPos、x][CurPos、y+1]、Color==OldColor Push(s,g[CurPos、x][CurPos、y+1]); !g[CurPos、x][CurPos、y-1]、Visited && g[CurPos、x][CurPos、y-1]、Color==OldColor Push(s,g[CurPos、x][CurPos、y-1]);
if(CurPos、x>0 &&
if(CurPos、y if(CurPos、y>0 && void CreateGDS(ElemType g[M][N]) { } void ShowGraphArray(ElemType g[M][N]) { int i,j; for(i=0;i for(j=0;j cout< for(j=0;j for(j=2;j<4;j++) g[i][j]、Color=3; g[i][j]、seat、x=i; g[i][j]、seat、y=j; g[i][j]、Visited=0; g[i][j]、Color=0; for(i=2;i<5;i++) for(i=5;i for(j=3;j<6;j++) g[i][j]、Color=3; } } 3、21 假设表达式有单字母变量与双目四则运算符构成。试写一个算法,将一个通常书写形式且书写正确得表达式转换为逆波兰表达式。馆鳢箏緱槛阑絞。 解: // 输入得表达式串必须为#、、、#格式 void InversePolandExpression(char Buffer[]) { } Status IsOpertor(char c) { char *p=\while(*p){ if(*p==c) Stack s; InitStack(s); int i=0,j=0; ElemType e; Push(s,Buffer[i]); i++; while(Buffer[i]!='#'){ } while(!StackEmpty(s)){ } Pop(s,e); Buffer[j]=e; j++; if(!IsOperator(Buffer[i])){ // 就是操作数 } else{ } // 就是操作符 GetTop(s,e); if(Prior(e,Buffer[i])){// 当栈顶优先权高于当前序列时,退栈 } else{ } Push(s,Buffer[i]); i++; Pop(s,e); Buffer[j]=e; j++; Buffer[j]=Buffer[i]; i++; j++; } } return TRUE; p++; return FALSE; Status Prior(char c1,char c2) { } 3、22 如题3、21得假设条件,试写一个算法,对以逆波兰式表示得表达式求值。 解: char CalVal_InverPoland(char Buffer[]) { } char Cal(char c1,char op,char c2) { int x,x1,x2; Stack Opnd; InitStack(Opnd); int i=0; char c; ElemType e1,e2; while(Buffer[i]!='#'){ } return c; if(!IsOperator(Buffer[i])){ } else{ } i++; Pop(Opnd,e2); Pop(Opnd,e1); c=Cal(e1,Buffer[i],e2); Push(Opnd,c); Push(Opnd,Buffer[i]); char ch[]=\int i=0,j=0; while(ch[i] && ch[i]!=c1) i++; if(i==2) i--; // 加与减可认为就是同级别得运算符 if(i==4) i--; // 乘与除可认为就是同级别得运算符 while(ch[j] && ch[j]!=c2) j++; if(j==2) j--; if(j==4) j--; if(i>=j) return TRUE; else return FALSE; } char ch[10]; ch[0]=c1; ch[1]='\\0'; x1=atoi(ch); ch[0]=c2; ch[1]='\\0'; x2=atoi(ch); switch(op){ case '+': } itoa(x,ch,10); return ch[0]; x=x1+x2; break; x=x1-x2; break; x=x1*x2; break; x=x1/x2; break; break; case '-': case '*': case '/': default: 3、23 如题3、21得假设条件,试写一个算法,判断给定得非空后缀表达式就是否为正确得逆波兰表达式,如果就是,则将它转化为波兰式。没鑾桨錨尷驟掺。 解: #include #include \、h\typedef char ARRAY[30]; typedef ARRAY ElemType; typedef struct NodeType{ ElemType data; NodeType *next; }NodeType,*LinkType; typedef struct{ LinkType top; int size; }Stack; void InitStack(Stack &s); Status Push(Stack &s,ElemType e); Status Pop(Stack &s,ElemType e); Status IsOperator(char c); Status StackEmpty(Stack s); Status InvToFroPoland(char a[]); int main() { } Status InvToFroPoland(char a[]) { Stack s; InitStack(s); int i=0; ElemType ch; ElemType c1; ElemType c2; while(a[i]!='#'){ if(!IsOperator(a[i])){ } else{ ch[0]=a[i]; ch[1]='\\0'; if(!StackEmpty(s)){ } else return FALSE; Pop(s,c2); if(!StackEmpty(s)){ } else return FALSE; Pop(s,c1); strcat(ch,c1); strcat(ch,c2); Push(s,ch); if(a[i]>='0' && a[i]<='9'){ } else return FALSE; ch[0]=a[i]; Push(s,ch); ch[1]='\\0'; char a[30]; cout<<\请输入逆波兰算术表达式字符序列:\cin>>a; if(InvToFroPoland(a)) cout< else cout<<\输入逆波兰算术表达式字符序列错误!\return 0;