系统恢复的,我也不知道什么东西

#include<stdio.h> #include<stdlib.h> #include"FloatStack.cpp" #define ElemType char #define MAXSIZE 50 struct Stack{ ElemType data[MAXSIZE]; int top; }; typedef Stack *SqStack; ////////////////////////////////////////////////////////////////////////////// void initStack(SqStack &st); int isEmpty(SqStack &st); int push(SqStack &st,ElemType e); int pop(SqStack &st,ElemType *e); void output(SqStack &st); void arrayPointer(char *p); void trans(char *exp, char *postexp); float compvalue(char *postexp); ///////////////////////////////////////////////////////////////////////////// void testTrans() { char arrs[50] = "(56-20)/(10+2)"; char arrstwo[50]; char *exp,*postexp; float f; exp=arrs; postexp=arrstwo; trans(exp,postexp); arrayPointer(arrs); arrayPointer(postexp); f=compvalue(postexp); printf("%f",f); } void testArrayPointer() { char charArry[] ="fjdsalfjlsajf"; char *p; p=charArry; arrayPointer(p); } void testStack() { SqStack st; Stack stackObject; st=&stackObject; initStack(st); push(st,'z'); output(st); // output(st); } void main() { //testStack(); // testArrayPointer(); testTrans(); } /** * 初始化堆栈 * */ void initStack(SqStack &st) { st->top=-1; // 空栈 } /** * 堆栈是否为空 * 空 1 * 非空 0 */ int isEmpty(SqStack &st) { return(st->top==-1); } /** * 进栈 * */ int push(SqStack &st,ElemType e) { // 是否满 if(st->top==(MAXSIZE-1)) return 0; st->top++; //要先加加 st->data[st->top] = e; //printf("%c",st->data[st->top]); return 1; } /** * 出栈 * */ int pop(SqStack &st,ElemType *e) { if(st->top==-1) // 是否为空 return 0; *e = st->data[st->top]; st->top--; return 1; } /** * 获得栈顶的值,但是不会 pop * */ int get(SqStack &st,ElemType *e) { if(st->top==-1) return 0; *e=st->data[st->top]; return 1; } void output(SqStack &st) { ElemType elem,*e; e=&elem; while(!isEmpty(st)) { pop(st,e); printf("%2c",*e); } printf("/n"); } /** * 测试数组指针 */ void arrayPointer(char *p) { while(*p!='/0') { printf("%2c",*p); p++; } printf("/n"); } //////////////////////////////////////////////////////////////////// /** * 将表达式转换成后缀表达式 * (56-20)/(10+2) */ void trans(char *exp, char *postexp) { // 建立堆栈 printf("(56-20)/(10+2)=%d/n",(56-20)/(10+2)); SqStack st; Stack stackObject; st=&stackObject; initStack(st); char temp,*ch; ch=&temp; while(*exp!='/0') //读取 { switch(*exp) { case '(': // 左括号 push(st,*exp); // 进栈 break; case ')': // get(st,ch); while(*ch!='(') { pop(st,ch); *postexp = *ch; // 把值放进去 postexp++; get(st,ch); } pop(st,ch); // 去除栈里面的 '(' // printf("%c",*ch); break; case '+': case '-': get(st,ch); while(*ch!='(' && !isEmpty(st)) // 不空且不等于 '(' { pop(st,ch); // 出栈 *postexp = *ch; // 存入 postexp++; } push(st,*exp);// *exp 进栈 break; case '*': case '/': get(st,ch); while(*ch!='(' && !isEmpty(st) && *ch=='*' || *ch=='/') // 不空且不等于 '(' { pop(st,ch); // 出栈 *postexp = *ch; // 存入 postexp++; } push(st,*exp);// *exp 进栈 break; case ' ': // 过滤空格 break; default: while(*exp>='0' && *exp<='9') { *postexp = *exp; postexp++; exp++; // 在此加 1 } *postexp = '#'; postexp++; exp--; }// switch exp++;// 在此加 1 }// while // 此时 exp 扫描完毕,栈不空出将所有数字出栈,并保存在 postexp中 while(!isEmpty(st)) { pop(st,ch); *postexp = *ch; postexp++; } *postexp = '/0'; } /** * 求后缀表达式 56#20#-4#2#+-的值 * */ float compvalue(char *postexp) { FloatStack obj; FStack fst; fst=&obj; initStackFloat(fst); float floatValue; float temp,*f; f = &temp; float temptwo,*ft; ft = &temptwo; float resultFloat,*rf; rf = &resultFloat; while(*postexp!='/0') { switch(*postexp) { case '+': popFloat(fst,f); popFloat(fst,ft); resultFloat = *ft + *f; pushFloat(fst,resultFloat); postexp++; break; case '-': popFloat(fst,f); popFloat(fst,ft); resultFloat = *ft - *f; // 相减,可能有位置问题 pushFloat(fst,resultFloat); postexp++; break; case '*': popFloat(fst,f); popFloat(fst,ft); resultFloat = *ft * *f; pushFloat(fst,resultFloat); postexp++; break; case '/': getFloat(fst,f); if(*f!=0) { popFloat(fst,f); popFloat(fst,ft); resultFloat = *ft / *f; pushFloat(fst,resultFloat); postexp++; } else { printf("/n/t除数不能为零%f",*f); return 0; } break; default: floatValue=0; while(*postexp>='0' && *postexp<='9') // 将字符转换为数字存放到 { floatValue = 10*floatValue + (*postexp) - '0'; postexp++; } pushFloat(fst,floatValue);// 进栈 if(*postexp == '#') postexp++; }// switch }// while popFloat(fst,f); return *f; }

你可能感兴趣的:(c,struct,测试,float,output)