C programming: Stacks. Help fully understand the code below by putting comments. THanks!  ... #include #include #include #include int numbers[500], tn=-1, to=-1; char ops[500]; void pushNum(int n) {  numbers[++tn] = n; } void pushOp(char ch)   {   ops[++to]=ch;   } int popNum() {  return numbers[tn--]; } char popOp() {   return ops[to--]; } int precedence(char op){   if(op == '+'||op == '-')     return 1;   if(op == '*'||op == '/')     return 2;   return 0; }   // this function will perform arithmetic operations. int applyOp(int a, int b, char op){   switch(op){     case '+': return a + b;     case '-': return a - b;     case '*': return a * b;     case '/': return a / b;     default: return 0;   } } int isOperator(char ch) { return(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='^'); } int evaluate(char exp[200]){   int i,num,output,r;   char c;   for(i=0;exp[i]!='\0';i++)   {   c = exp[i];   if(isdigit(c)!=0)   {   num = 0;   while (isdigit(c))   {   num = num*10 + (c-'0');   i++;   if(i

C++ Programming: From Problem Analysis to Program Design
8th Edition
ISBN:9781337102087
Author:D. S. Malik
Publisher:D. S. Malik
Chapter18: Stacks And Queues
Section: Chapter Questions
Problem 3PE
icon
Related questions
Question
100%

C programming: Stacks. Help fully understand the code below by putting comments. THanks! 
...

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>


int numbers[500], tn=-1, to=-1;
char ops[500];
void pushNum(int n) {
 numbers[++tn] = n;
}

void pushOp(char ch)
  {
  ops[++to]=ch;
  }

int popNum() {
 return numbers[tn--];
}

char popOp() {
  return ops[to--];
}

int precedence(char op){

  if(op == '+'||op == '-')

    return 1;

  if(op == '*'||op == '/')

    return 2;

  return 0;

}

 

// this function will perform arithmetic operations.
int applyOp(int a, int b, char op){

  switch(op){

    case '+': return a + b;

    case '-': return a - b;

    case '*': return a * b;

    case '/': return a / b;
    default: return 0;
  }

}

int isOperator(char ch)
{
return(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='^');
}

int evaluate(char exp[200]){

  int i,num,output,r;
  char c;
  for(i=0;exp[i]!='\0';i++)
  {
  c = exp[i];
  if(isdigit(c)!=0)
  {
  num = 0;
  while (isdigit(c))
  {
  num = num*10 + (c-'0');
  i++;
  if(i <strlen(exp))
  c = exp[i];
  else
  break;
  }
  i--;
    pushNum(num);
}
else if(c=='(')
{
pushOp(c);
}
else if(c==')')
{
while(ops[to]!='(')
{
r = applyOp(popNum(), popNum(), popOp());
pushNum(r);
}
popOp();
}
else if(isOperator(c))
{
while(to!=-1 && precedence(c)<=precedence(ops[to]))
{
output = applyOp(popNum(), popNum(), popOp());
pushNum(output);
}
pushOp(c);
}
}
  while(to!=-1)
{
output = applyOp(popNum(), popNum(), popOp());
pushNum(output);
}
return popNum();
}

 

int main() {

  printf("%d\n", evaluate("10 + 2 * 6"));
  printf("%d\n", evaluate("100 * 2 + 12"));
  printf("%d\n", evaluate("100 * ( 2 + 12 )"));
  printf("%d\n", evaluate("100 * ( 2 + 12 ) / 14"));




    return 0;
}
Expert Solution
trending now

Trending now

This is a popular solution!

steps

Step by step

Solved in 6 steps with 4 images

Blurred answer
Knowledge Booster
Stack
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
  • SEE MORE QUESTIONS
Recommended textbooks for you
C++ Programming: From Problem Analysis to Program…
C++ Programming: From Problem Analysis to Program…
Computer Science
ISBN:
9781337102087
Author:
D. S. Malik
Publisher:
Cengage Learning