char precede(char e,char c) { if(c=='+'||c=='-') { if(e=='+'||e=='-'||e==')'||e=='=') return '>'; else return '<'; } if(c=='*'||'/') { if(e=='(') return '<'; else return '>'; } if(c=='(') { if(e==')') return '='; else return '<'; } if(c==')') return '>'; if(c=='=') { if(e=='=') return '='; else return '<'; } }
int In(char c) { if(c>='0'&&c<='9') return 1; else return 0; }
int Operate(int a,char theta,int b) {
int s; switch(theta) { case '+': s=a+b; break; case '-': s=a-b; break; case '*': s=a*b; break; case '/': if(b!=0) s=a/b; else printf(\ break; } return s; }
int main() { int k=0,m,y,a,b; SqStack_T OPTR; SqStack_N OPND; char c,theta; InitStack_T(OPTR); Push_T(OPTR,'='); InitStack_N(OPND); c=getchar(); while(c!='='||GetTop_T(OPTR)!='=') { if(In(c)) { m=c-'0'; if(k==1) { Pop_N(OPND,y); y=m+y*10; Push_N(OPND,y); k=1; c=getchar(); } else { y=m; Push_N(OPND,y); c=getchar(); k=1; }
} else { k=0; switch(Precede(GetTop_T(OPTR),c)) { case '<': Push_T(OPTR,c); c=getchar(); break; case '=': Pop_T(OPTR,c); c=getchar(); break; case '>': Pop_T(OPTR,theta); Pop_N(OPND,b); Pop_N(OPND,a); Push_N(OPND,Operate(a,theta,b)); break; } } } printf(\ return 0; }
2.7队列的应用——银行客户平均等待时间 #include
typedef int QElemType; #define MAXQSIZE 100
typedef struct { QElemType *base; int front; int rear; }SqQueue;
Status InitQueue(SqQueue &Q) { Q.base=(QElemType*)malloc(MAXQSIZE*sizeof(QElemType)); if(!Q.base) return ERROR; Q.front=Q.rear=0;
return OK; }
Status EnQueue(SqQueue &Q,QElemType e) { if((Q.rear+1)%MAXQSIZE==Q.front) return ERROR; Q.base[Q.rear]=e; Q.rear=(Q.rear+1)%MAXQSIZE; return OK; }
Status DeQueue(SqQueue &Q,QElemType &e) { if(Q.front==Q.rear) return ERROR; e=Q.base[Q.front]; Q.front=(Q.front+1)%MAXQSIZE; return OK; }
Status GetHead(SqQueue Q,QElemType &e) { if(Q.rear==Q.front) return ERROR; e=Q.base[Q.front]; return OK; }
int QueueLength(SqQueue Q) { return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE; }
Status QueueTraverse(SqQueue Q) { int i; i=Q.front; if(Q.rear==Q.front) printf(\ else { printf(\ while(i!=Q.rear)
{ printf(\ i=(i+1)%MAXQSIZE; } } printf(\ return OK; }
int main() { int i,a; SqQueue S; int p,q,e,r; float t,s=0; InitQueue(S); scanf(\ getchar(); for(i=1;i<=a*2;i++) { scanf(\ getchar(); EnQueue(S,e); } p=S.base[S.front]; while(S.rear>S.front) { q=p+S.base[S.front+1]; DeQueue(S,e); DeQueue(S,e); if(S.front==S.rear) break; r=q-S.base[S.front]; if(r<0) { r=0; p=S.base[S.front]; continue; } s=s+r; p=q; } t=s/a; printf(\