每天一算法(一)——用链表实现加减乘运算
来源:互联网 发布:数控编程的步骤 编辑:程序博客网 时间: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
- 每天一算法(一)——用链表实现加减乘运算
- C++运算符重载(一)——加减
- 多项式加减乘运算
- 高精度加减乘运算
- 多项式加减乘除法算法实现
- 最小二乘曲线拟合——C语言算法实现一
- 每天一算法——约瑟夫问题
- 数据结构 —— 链表实现多项式加减乘
- 每天一算法,每天一小歩——冒泡排序
- java通过矩阵类实现矩阵的加减乘运算
- c++实现大数的加减乘运算(数组存放)
- 运算符(加减乘)
- 每天一算法
- 大数运算:支持加减乘运算
- 数据结构与算法(3)——矩阵的加、乘、转置运算实现
- 单链表模拟一元多项式加减乘运算
- 大整数的加减乘运算
- 无限长整数(加减乘运算)
- Android中shape的解析
- HBase伪分布式安装的简单步骤记录
- ubuntu修改主机名
- linux trap的翻译问题
- poj 1852 Ants_贪心
- 每天一算法(一)——用链表实现加减乘运算
- Linux网络编程一步一步学-编写一个HTTP协议的目录
- 曾经的梦想
- eclispe中只能输入英文,无法调用输入法
- web app 的挑战
- SGU 194 无源无汇可行流求解
- Android SoundPool播放音频
- 一台电脑一天用多少度电
- 这些年,看社交设计的变迁-20140218早读课