📄 bdszh.txt
字号:
plstack->top=plstack->top->link;
plstack->top=q;
}
return (plstack);
}
PLinkStack pop_one(PLinkStack plstack)
{PNode p;
p=plstack->base;
while(p->link!=plstack->top) p=p->link;
plstack->top=plstack->top->link;
plstack->top=p;
return (plstack);
}
PLinkStack pop_all(PLinkList pllist,PLinkStack
plstack)
{PNode p;
if(!isOperator(pllist->top->info)&&pllist->top->info!='_')
push_underline(pllist);
while(plstack->top!=plstack->base){
p=plstack->base;
while(p->link!=plstack->top) p=p->link;
Create_LinkListNode(pllist);
pllist->top->info=plstack->top->info;
plstack->top=plstack->top->link;
plstack->top=p;
}
return (plstack);
}
int isOperator(DataType i)
{
if(i=='+' || i=='-' || i=='*' || i=='/' ||
i=='(' || i==')') return (1);
else return (0);
}
int isPoint_included(PNode p)
{
PNode q,temp;
q=p;
while(q->link->info!='_'){
if(q->info=='.') temp=q;
q=q->link;
}
if(temp->info=='.') return (1);
else return (0);
}
int Calculator_underline(PNode p)
{
PNode q;
int i;
i=0;
q=p;
while(!isOperator(q->link->info)){
if(q->link->info=='_') i++;
q=q->link;
}
return (i);
}
NumberType Calculator(PLinkList pllist)
{
PNode p,q,temp,temp1,swap;
int i,j;
NumberType t,t1,t2,tmark1,tmark2,m;
t=t1=t2=0;
q=p=pllist->base;
while(!isOperator(p->link->info)) p=p->link;/*
find p */
while(p!=pllist->top){
/**************************************************************/
/**************************************************************/
if(!isOperator(p->info)&&p->link==pllist->top){
if(q==pllist->base){ /*
find q */
while(q!=p){
if(q->info=='_') temp=q;
q=q->link;
}
q=temp;
}
temp1=temp=pllist->base;
while(temp!=q){ /*
find temp */
if(temp->info=='_') temp1=temp;
temp=temp->link;
}
temp=temp1; temp1=pllist->base;
/*////////// Calculate function
/////////////////////*/
swap=q; i=0; /* calculate t1 */
if(isPoint_included(q)){ /*include
point */
while(swap->link->info!='.'){swap=swap->link;i++;}
swap=q;
while(swap->link->info!='.'&&--i!=0){
j=i;
m=(NumberType)swap->link->info-'0';
while(j--!=0) m=m*10;
t1=t1+m;
swap=swap->link;
}
if(i==0)
{t1=t1+(NumberType)swap->link->info-'0';
swap=swap->link->link;}
i=1;
while(swap->link->info!='_'){
j=i;
m=(NumberType)swap->link->info-'0';
while(j--!=0) m=m*1/10;
t1=t1+m;
swap=swap->link;
i++;
}
}
else if(!isPoint_included(q)){ /*doesn't
include point*/
while(swap->link->info!='_')
{swap=swap->link; i++;}
swap=q;
while(swap->link->info!='_'&&--i!=0) {
j=i;
m=(NumberType)swap->link->info-'0';
while(j--!=0) m=m*10;
t1=t1+m;
swap=swap->link;
}
if(i==0)
{t1=t1+(NumberType)swap->link->info-'0';swap=swap->link;}
}
swap=temp; t2=0;i=0; /* calculate t2 */
if(isPoint_included(temp)){ /*include point
*/
while(swap->link->info!='.'){swap=swap->link;i++;}
swap=temp;
while(swap->link->info!='.'&&--i!=0){
j=i;
m=(NumberType)swap->link->info-'0';
while(j--!=0) m=m*10;
t2=t2+m;
swap=swap->link;
}
if(i==0||i==-1)
{t2=t2+(NumberType)swap->link->info-'0';
swap=swap->link->link;}
i=1;
while(swap->link->info!='_'){
j=i;
m=(NumberType)(swap->link->info-'0');
while(j--!=0) m=m*1/10;
t2=t2+m;
swap=swap->link;
i++;
}
}
else if(!isPoint_included(temp)){
while(swap->link->info!='_'){swap=swap->link;i++;}
swap=temp;
while(swap->link->info!='_'&&--i!=0) {
j=i;
m=(NumberType)swap->link->info-'0';
while(j--!=0) m=m*10;
t2=t2+m;
swap=swap->link;
}
if(i==0||i==-1)
{t2=t2+(NumberType)swap->link->info-'0';swap=swap->link;}
}
if(p->link->info=='+') t=t1+t2;
else if(p->link->info=='-') t=t2-t1;
else if(p->link->info=='*') t=t1*t2;
else if(p->link->info=='/') t=t2/t1;
/*///// Deal with the left
//////////////////*/
q=temp;
p=p->link;
}
/*******************************************************************/
/*******************************************************************/
else
if(!isOperator(p->info)&&isOperator(p->link->link->info)){
if(q==pllist->base){ /*
find q */
while(q!=p){
if(q->info=='_') temp=q;
q=q->link;
}
q=temp;
}
temp1=temp=pllist->base;
while(temp!=q){ /*
find temp */
if(temp->info=='_') temp1=temp;
temp=temp->link;
}
temp=temp1; temp1=pllist->base;
/*////////// Calculate function
/////////////////////*/
swap=q; i=0; /* calculate t1 */
if(isPoint_included(q)){ /*include
point */
while(swap->link->info!='.'){swap=swap->link;i++;}
swap=q;
while(swap->link->info!='.'&&--i!=0){
j=i;
m=(NumberType)swap->link->info-'0';
while(j--!=0) m=m*10;
t1=t1+m;
swap=swap->link;
}
if(i==0)
{t1=t1+(NumberType)swap->link->info-'0';
swap=swap->link->link;}
i=1;
while(swap->link->info!='_'){
j=i;
m=(NumberType)swap->link->info-'0';
while(j--!=0) m=m*1/10;
t1=t1+m;
swap=swap->link;
i++;
}
}
else if(!isPoint_included(q)){ /*doesn't
include point*/
while(swap->link->info!='_')
{swap=swap->link; i++;}
swap=q;
while(swap->link->info!='_'&&--i!=0) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -