您的位置:首页 > 其它

使用栈技术实现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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: