Please help me this C program For this assignment you are to
Please help me this C++ program
 For this assignment, you are to write a program, which will calculate the results of Reverse Polish expressions that are provided by the user.
 
 You must use a linked list to maintain the stack for this program (array implementations of the stack will not receive full credit).
 
 You must handle the following situations (errors):
 Too many operators (+ - / *)
 Too many operands (doubles)
 Division by zero
 
 The program will take in a Polish expression that separates the operators and operands by a single space, and terminates the expression with an equals sign.
 
 The program will continue to take and evaluate expressions until the user enters a zero (0) on a line by itself followed by a new line.
 
 Your sample output should show the handling of all the error conditions as well as make use of all of the operators.
 
 Sample IO: (note: formatting of output isn’t a critical issue)
 Input Output
 10 15 + = 25
 10 15 - = -5
 2.5 3.5 + = 6 (or 6.0)
 10 0 / = Error: Division by zero
 10 20 * / = Error: Too many operators
 12 20 30 / = Error: Too many operands
 -10 -30 - = 20
 100 10 50 25 / * - -2 / = -40
make sure it work
Solution
Please execute the following code. Stack has been implemented using linked list.
#include <iostream>
 #include <iostream>
 #include <string.h>
 #include <sstream>
 #include <stdlib.h>
 using namespace std;
struct node {
     float data;
     struct node *next;
 };
class stack {
     struct node *top;
     public : stack() {
         top = NULL;
     }
     void push(float element);
     float pop();
     float peek();
     bool isEmpty();
     int size();
   
 };
bool stack::isEmpty() {
     if (top == NULL) {
         return true;
     }
     return false;
 }
float stack::peek() {
     if (top == NULL) {
         cout << \"Error : empty stack\";      
     }
     return top->data;
 }
void stack::push(float element) {
     struct node *newNode;
     newNode = new node;
     newNode->data = element;
     newNode->next = NULL;
     if (top != NULL)
         newNode->next=top;
     top=newNode;
 }
float stack::pop() {
     struct node *temp;
     if(top==NULL) {
         cout<<\"Error : empty stack\";
     }
     temp=top;
     top=top->next;
     float value = temp->data;
     delete temp;
     return value;
 }
int stack::size() {
     struct node *temp;
     temp=top;
     int count = 0;
     while (temp != NULL) {
         count = count + 1;      
         temp=temp->next;
     }
     return count;
 }
int main() {
     while (1) {
         stack s;
         float first, second;
         string input, str1;
       
         getline(cin,input);
         istringstream is(input);
       
         if (input == \"0\") {
             return 0;
         }
       
         bool flag = true;
         for(;is>>str1;) {
             if (str1.compare(\"+\")==0) {
                 if (s.size() < 2) {
                     cout << \"Error: Too many operators\ \";
                     flag = false;
                     break;
                 }
                 second=s.pop();          
                  first=s.pop();
                 s.push(first+second);
             }
             else if (str1.compare(\"-\")==0) {
                 if (s.size() < 2) {
                     cout << \"Error: Too many operators\ \";
                     flag = false;
                     break;
                 }
                 second=s.pop();          
                  first=s.pop();
                 s.push(first - second);
             }
             else if(str1.compare(\"*\")==0) {
                 if (s.size() < 2) {
                     cout << \"Error: Too many operators\ \";
                     flag = false;
                     break;
                 }
                 second=s.pop();          
                  first=s.pop();
                 s.push(first * second);
             } else if(str1.compare(\"/\")==0){
                 if (s.size() < 2) {
                     cout << \"Error: Too many operators\ \";
                     flag = false;
                     break;
                 }
                 second=s.pop();          
                  first=s.pop();
                 if (second == 0) {
                     cout << \"Error: Division by zero\ \";
                     flag = false;
                     break;
                 }
                 s.push(first / second);
             } else {
                 s.push(strtof(str1.c_str(),NULL));
             }
         }
       
         if (s.size() == 1 && flag) {
             cout << s.pop(); cout << \"\ \";
         }
         else if (s.size() > 1) {
             cout << \"Error: Too many operands\ \";      
         }
     }
 }  



