用链表实现加减乘运算
// resultW.cpp : 定义控制台应用程序的入口点。 #include "F:\HU\resultW\resultW\stdafx.h" #include <assert.h> #include <stdlib.h> #include <cstring> #include <iostream> using namespace std; #define MAXSIZE_T 256 typedef struct operand //运算数 { int data; struct operand *next; }NodeNum; typedef struct operation//运算符 { char operate; struct operation *next; }NodeSign; NodeNum *HeadNum, *preNum,*CurNum, *addNum; NodeSign *HeadSign,*preSign,*CurSign, *addSign; int GetResult(char *input) { char substr[10]; assert(input); int k = 0,sum = 0; memset(substr,0,10); HeadNum = (NodeNum*)malloc(sizeof(NodeNum)); //number list head HeadSign = (NodeSign*)malloc(sizeof(NodeSign));//sign list head CurNum = HeadNum; CurSign = HeadSign; while (*input != '\0') { if (*input == '+' || *input == '-'|| *input == '='||*input == '*') { int cc = atoi(substr);//char convert to number addNum = (NodeNum *)malloc(sizeof(NodeNum)); addNum->data = cc; CurNum->next = addNum; CurNum = addNum; addSign = (NodeSign *)malloc(sizeof(NodeSign)); addSign->operate = *input; CurSign->next = addSign; CurSign = addSign; memset(substr,0,10); input++; k = 0; } else if(*input >= '0' && *input <= '9') { substr[k++] = *input;//get input++; } else { cout<<"input wrong data!"<<endl; return 0; } } /**/ preNum = HeadNum->next; CurNum = preNum->next; preSign = HeadSign; CurSign = preSign->next; while(CurSign->operate != '=')//operate multiplication first { if (CurSign->operate == '*') { preNum->data = preNum->data * CurNum->data; preNum->next = CurNum->next; free(CurNum); CurNum = preNum->next;// preSign->next = CurSign->next; free(CurSign); CurSign = preSign->next;// } else { preSign = CurSign; CurSign = CurSign->next; preNum = CurNum; CurNum = CurNum->next; } } /**/ preNum = HeadNum->next; CurNum = preNum->next; preSign = HeadSign; CurSign = preSign->next; if (CurSign->operate == '=') { sum = preNum->data; free(preNum); }else { while(CurSign->operate != '=')//operate plus minus second { if(CurSign->operate == '+') { CurNum->data = preNum->data + CurNum->data; }else/* operation '-'*/ { CurNum->data = preNum->data - CurNum->data; } sum = CurNum->data; free(preNum); preNum = CurNum; CurNum = CurNum->next; //preSign = CurSign; preSign->next = CurSign->next; free(CurSign); CurSign = preSign->next; } } free(CurSign); //free(CurNum); free(HeadNum); free(HeadSign); return sum; } int _tmain(int argc, _TCHAR* argv[]) { int count = 0, k = 0; char cc; char input[MAXSIZE_T]; memset(input, 0, MAXSIZE_T); while((cc = getchar()) != 'a' )//program exits when get char 'a' { if (cc != '=') { input[k++] = cc; } else { input[k] = '='; count = GetResult(input); cout<<"result is:"<<count<<endl; memset(input,0,MAXSIZE_T); k = 0; cout<<"please put expression:"<<endl; cc = getchar(); } } return 0; }