每天一算法(一)——用链表实现加减乘运算

来源:互联网 发布:数控编程的步骤 编辑:程序博客网 时间:2024/05/22 03:25

用链表实现加减乘运算

// 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 256typedef 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 headHeadSign = (NodeSign*)malloc(sizeof(NodeSign));//sign list headCurNum = HeadNum;CurSign = HeadSign;while (*input != '\0'){if (*input == '+' || *input == '-'|| *input == '='||*input == '*'){int cc = atoi(substr);//char convert to numberaddNum = (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;}


                                             
0 0