使用栈技术实现10以内加减乘除算式的计算
2017-09-08 23:29
369 查看
头文件:
#ifndef _MYSTACK_H_
#define _MYSTACK_H_
#include <stdio.h>
#define SIZE 10
struct myStack{
int arr[SIZE];
int num;
};
//初始化函数
void myStack_Init(myStack* stk);
//清理函数
void myStack_deInit(myStack* stk);
//入栈函数
void myStack_push(myStack* stk, int num);
//出栈函数
int myStack_pop(myStack* stk);
//出栈函数(删除)
void myStack_top(myStack* stk, int num);
//检查栈是否为空
bool myStack_empty(myStack* stk);
//检查栈是否已满
bool myStack_full(myStack* stk);
//栈中元素个数
int myStack_Count(myStack* stk);
//测试函数
void testStack();
int myCalc();
#endif#include "myStack.h"
源文件:
void myStack_Init(myStack* stk)
{
stk->num = 0;
}
void myStack_deInit(myStack* stk)
{
stk->num = 0;
}
void myStack_push(myStack* stk, int num)
{
stk->arr[stk->num] = num;
(stk->num)++;
}
//出栈函数(删除)
int myStack_pop(myStack* stk)
{
int ret = stk->arr[stk->num - 1];
(stk->num)--;
return ret;
}
//出栈函数(不删除)
int myStack_top(myStack* stk)
{
return stk->arr[stk->num - 1];
}
//检查栈是否为空
bool myStack_empty(myStack* stk)
{
return stk->num == 0;
}
//检查栈是否已满
bool myStack_full(myStack* stk)
{
return stk->num == SIZE;
}
//栈中元素个数
int myStack_Count(myStack* stk)
{
return stk->num;
}
void testStack()
{
myStack stk = { 0 };
myStack_Init(&stk);
printf("IsEmpty:%d\n", myStack_empty(&stk));
printf("IsFull:%d\n", myStack_full(&stk));
myStack_push(&stk, 3);
myStack_push(&stk, 4);
myStack_push(&stk, 6);
myStack_push(&stk, 8);
printf("IsEmpty:%d\n", myStack_empty(&stk));
printf("Element Count:%d\n", myStack_Count(&stk));
printf("IsFull:%d\n", myStack_full(&stk));
printf("%d ", myStack_pop(&stk));
printf("%d ", myStack_pop(&stk));
printf("%d ", myStack_pop(&stk));
printf("%d ", myStack_pop(&stk));
printf("\n");
printf("IsEmpty:%d\n", myStack_empty(&stk));
}
int myCalc()
{
printf("请输入计算式(10以内加减乘除,算式不要带空格):\n");
char buf[255] = { 0 };
fgets(buf, 255, stdin);
char* p_ch = buf;
myStack stk = { 0 };
myStack_Init(&stk);
int num = 0, num1 = 0, ptr = 0;
while (1)
{
if (*p_ch >= '0' && *p_ch <= '9')
{
myStack_push(&stk, *p_ch - '0');
}else if (*p_ch == '\n')
{
if (myStack_Count(&stk) == 3)
{
num1 = myStack_pop(&stk);
ptr = myStack_pop(&stk);
num = myStack_pop(&stk);
if (ptr == '-') myStack_push(&stk, num - num1);
if (ptr == '+') myStack_push(&stk, num + num1);
}
break;
}else if (*p_ch == '*' || *p_ch == '/')
{
4000
num = myStack_pop(&stk);
num1 = *(p_ch + 1) - '0';
if (*p_ch == '*') myStack_push(&stk, num * num1);
if (*p_ch == '/') myStack_push(&stk, num / num1);
p_ch++;
}
else if (*p_ch == '+' || *p_ch == '-')
{
if (myStack_Count(&stk) == 3)
{
num1 = myStack_pop(&stk);
ptr = myStack_pop(&stk);
num = myStack_pop(&stk);
if (ptr == '-') myStack_push(&stk, num - num1);
if (ptr == '+') myStack_push(&stk, num + num1);
}
myStack_push(&stk, *p_ch);
}
p_ch++;
}
printf("%d\n", myStack_pop(&stk));
return 0;
}
主函数:
#include "myStack.h"
#include <stdio.h>
int main()
{
myCalc();
return 0;
}
#ifndef _MYSTACK_H_
#define _MYSTACK_H_
#include <stdio.h>
#define SIZE 10
struct myStack{
int arr[SIZE];
int num;
};
//初始化函数
void myStack_Init(myStack* stk);
//清理函数
void myStack_deInit(myStack* stk);
//入栈函数
void myStack_push(myStack* stk, int num);
//出栈函数
int myStack_pop(myStack* stk);
//出栈函数(删除)
void myStack_top(myStack* stk, int num);
//检查栈是否为空
bool myStack_empty(myStack* stk);
//检查栈是否已满
bool myStack_full(myStack* stk);
//栈中元素个数
int myStack_Count(myStack* stk);
//测试函数
void testStack();
int myCalc();
#endif#include "myStack.h"
源文件:
void myStack_Init(myStack* stk)
{
stk->num = 0;
}
void myStack_deInit(myStack* stk)
{
stk->num = 0;
}
void myStack_push(myStack* stk, int num)
{
stk->arr[stk->num] = num;
(stk->num)++;
}
//出栈函数(删除)
int myStack_pop(myStack* stk)
{
int ret = stk->arr[stk->num - 1];
(stk->num)--;
return ret;
}
//出栈函数(不删除)
int myStack_top(myStack* stk)
{
return stk->arr[stk->num - 1];
}
//检查栈是否为空
bool myStack_empty(myStack* stk)
{
return stk->num == 0;
}
//检查栈是否已满
bool myStack_full(myStack* stk)
{
return stk->num == SIZE;
}
//栈中元素个数
int myStack_Count(myStack* stk)
{
return stk->num;
}
void testStack()
{
myStack stk = { 0 };
myStack_Init(&stk);
printf("IsEmpty:%d\n", myStack_empty(&stk));
printf("IsFull:%d\n", myStack_full(&stk));
myStack_push(&stk, 3);
myStack_push(&stk, 4);
myStack_push(&stk, 6);
myStack_push(&stk, 8);
printf("IsEmpty:%d\n", myStack_empty(&stk));
printf("Element Count:%d\n", myStack_Count(&stk));
printf("IsFull:%d\n", myStack_full(&stk));
printf("%d ", myStack_pop(&stk));
printf("%d ", myStack_pop(&stk));
printf("%d ", myStack_pop(&stk));
printf("%d ", myStack_pop(&stk));
printf("\n");
printf("IsEmpty:%d\n", myStack_empty(&stk));
}
int myCalc()
{
printf("请输入计算式(10以内加减乘除,算式不要带空格):\n");
char buf[255] = { 0 };
fgets(buf, 255, stdin);
char* p_ch = buf;
myStack stk = { 0 };
myStack_Init(&stk);
int num = 0, num1 = 0, ptr = 0;
while (1)
{
if (*p_ch >= '0' && *p_ch <= '9')
{
myStack_push(&stk, *p_ch - '0');
}else if (*p_ch == '\n')
{
if (myStack_Count(&stk) == 3)
{
num1 = myStack_pop(&stk);
ptr = myStack_pop(&stk);
num = myStack_pop(&stk);
if (ptr == '-') myStack_push(&stk, num - num1);
if (ptr == '+') myStack_push(&stk, num + num1);
}
break;
}else if (*p_ch == '*' || *p_ch == '/')
{
4000
num = myStack_pop(&stk);
num1 = *(p_ch + 1) - '0';
if (*p_ch == '*') myStack_push(&stk, num * num1);
if (*p_ch == '/') myStack_push(&stk, num / num1);
p_ch++;
}
else if (*p_ch == '+' || *p_ch == '-')
{
if (myStack_Count(&stk) == 3)
{
num1 = myStack_pop(&stk);
ptr = myStack_pop(&stk);
num = myStack_pop(&stk);
if (ptr == '-') myStack_push(&stk, num - num1);
if (ptr == '+') myStack_push(&stk, num + num1);
}
myStack_push(&stk, *p_ch);
}
p_ch++;
}
printf("%d\n", myStack_pop(&stk));
return 0;
}
主函数:
#include "myStack.h"
#include <stdio.h>
int main()
{
myCalc();
return 0;
}
相关文章推荐
- 电商网站中价格的精确计算(使用BigDecimal进行精确运算(实现加减乘除运算))
- C++实现简易表达式的计算(操作室为10以内)
- 10、Spring技术栈-整合Redis,使用RedisTemplate实现数据缓存实战
- Java实现随机出题,10道10以内加减法计算
- 使用VS2005的 ClickOnce 技术实现按需下载组件
- 使用Antlr和JfreeChart实现项目源代码行数计算图表
- 使用DirectX实现视频播放_技术
- 【转载】使用VML技术实现圆角表格的绘制
- 使用 JAVA 技术实现新一代 OSS/BSS
- 使用模板报表提高生产力,水晶报表 10 模板技术
- [语音合成技术第四讲]使用C++实现语音识别
- 如何使用IFRAME来实现类似Ajax的技术----远程脚本
- 使用VS2005的 ClickOnce 技术实现按需下载组件
- 如何使用反射技术实现ASP.NET国际化站点
- 使用VS2005的 ClickOnce 技术实现按需下载组件
- 使用VS2005的 ClickOnce 技术实现按需下载组件
- [原创]使用RMI编写客户端-服务器应用程序,实现分布式计算
- 使用JAVA技术实现新一代OSS/BSS
- 使用J2ME技术实现简单的动画(附代码实现)
- 不使用+,-,*./的整数加减乘除的实现