Question
Please help me write a code in C++. Once again, it must be a C++ program that evaluates Postfix Expressions using the list class given
Please help me write a code in C++. Once again, it must be a C++ program that evaluates Postfix Expressions using the list class given in the book. It should check for all parameters listed in the assignment posted below.
- You must read in input from user and should only read input until '$' where that is your end marker.
- The input string will contain no blank characters and all numbers are between 0 and 9 only.
- The valid operators are '+', '-', '*', and '/'. Parenthesis are not required to be read in for this program.
The list.h code from the book is listed below:
#ifndef LIST_H #define LIST_H #include template class List { private: // The basic doubly linked list node. // Nested inside of List, can be public // because the Node is itself private struct Node { Object data; Node *prev; Node *next; Node( const Object & d = Object( ), Node * p = NULL, Node * n = NULL ) : data( d ), prev( p ), next( n ) { } }; public: class const_iterator { public: // Public constructor for const_iterator. const_iterator( ) : current( NULL ) { } // Return the object stored at the current position. // For const_iterator, this is an accessor with a // const reference return type. const Object & operator* ( ) const { return retrieve( ); } const_iterator & operator++ ( ) { current = current->next; return *this; } const_iterator operator++ ( int ) { const_iterator old = *this; ++( *this ); return old; } const_iterator & operator-- ( ) { current = current->prev; return *this; } const_iterator operator-- ( int ) { const_iterator old = *this; --( *this ); return old; } bool operator== ( const const_iterator & rhs ) const { return current == rhs.current; } bool operator!= ( const const_iterator & rhs ) const { return !( *this == rhs ); } protected: Node *current; // Protected helper in const_iterator that returns the object // stored at the current position. Can be called by all // three versions of operator* without any type conversions. Object & retrieve( ) const { return current->data; } // Protected constructor for const_iterator. // Expects a pointer that represents the current position. const_iterator( Node *p ) : current( p ) { } friend class List; }; class iterator : public const_iterator { public: // Public constructor for iterator. // Calls the base-class constructor. // Must be provided because the private constructor // is written; otherwise zero-parameter constructor // would be disabled. iterator( ) { } Object & operator* ( ) { return retrieve( ); } // Return the object stored at the current position. // For iterator, there is an accessor with a // const reference return type and a mutator with // a reference return type. The accessor is shown first. const Object & operator* ( ) const { return const_iterator::operator*( ); } iterator & operator++ ( ) { current = current->next; return *this; } iterator operator++ ( int ) { iterator old = *this; ++( *this ); return old; } iterator & operator-- ( ) { current = current->prev; return *this; } iterator operator-- ( int ) { iterator old = *this; --( *this ); return old; } protected: // Protected constructor for iterator. // Expects the current position. iterator( Node *p ) : const_iterator( p ) { } friend class List; }; public: List( ) { init( ); } ~List( ) { clear( ); delete head; delete tail; } List( const List & rhs ) { init( ); *this = rhs; } const List & operator= ( const List & rhs ) { if( this == &rhs ) return *this; clear( ); for( const_iterator itr = rhs.begin( ); itr != rhs.end( ); ++itr ) push_back( *itr ); return *this; } // Return iterator representing beginning of list. // Mutator version is first, then accessor version. iterator begin( ) { return iterator( head->next ); } const_iterator begin( ) const { return const_iterator( head->next ); } // Return iterator representing endmarker of list. // Mutator version is first, then accessor version. iterator end( ) { return iterator( tail ); } const_iterator end( ) const { return const_iterator( tail ); } // Return number of elements currently in the list. int size( ) const { return theSize; } // Return true if the list is empty, false otherwise. bool empty( ) const { return size( ) == 0; } void clear( ) { while( !empty( ) ) pop_front( ); } // front, back, push_front, push_back, pop_front, and pop_back // are the basic double-ended queue operations. Object & front( ) { return *begin( ); } const Object & front( ) const { return *begin( ); } Object & back( ) { return *--end( ); } const Object & back( ) const { return *--end( ); } void push_front( const Object & x ) { insert( begin( ), x ); } void push_back( const Object & x ) { insert( end( ), x ); } void pop_front( ) { erase( begin( ) ); } void pop_back( ) { erase( --end( ) ); } // Insert x before itr. iterator insert( iterator itr, const Object & x ) { Node *p = itr.current; theSize++; return iterator( p->prev = p->prev->next = new Node( x, p->prev, p ) ); } // Erase item at itr. iterator erase( iterator itr ) { Node *p = itr.current; iterator retVal( p->next ); p->prev->next = p->next; p->next->prev = p->prev; delete p; theSize--; return retVal; } iterator erase( iterator start, iterator end ) { for( iterator itr = start; itr != end; ) itr = erase( itr ); return end; } private: int theSize; Node *head; Node *tail; void init( ) { theSize = 0; head = new Node; tail = new Node; head->next = tail; tail->prev = head; } }; #endifEvaluation Postfix Expressions In this assignment, you are to write a simple program to evaluate postfix expressions. For this you must use the stack algorithm discussed in class (see also Section 3.6.3 in the text book). Input to the program Input to the program is a postfix expression, where the $ symbol is used as an end marker. (To make things simpler you may assume that the input string contains no blank characters, thus all'numbers are between O and 9 only.) For example, the input could be 6523+8*+3+*$ Reading the Input Reading the input is a bit tricky because there are both integers and characters present. One way to do this, is read the input entirely as characters, nd then convert those characters which represent numbers between O and 9 into int. To read characters one by one you could use something like while (istream && ((istream . peek ( ) ) != ,\$')) istream c; irt Stack Implementation You may write your own stack using a dynamic erray, or you may use the list class from the book. Output of the program The program will write the result of the expression (in the example 288), or the string This is not a valid postfix expression (if the expression is not valid). Evaluation Postfix Expressions In this assignment, you are to write a simple program to evaluate postfix expressions. For this you must use the stack algorithm discussed in class (see also Section 3.6.3 in the text book). Input to the program Input to the program is a postfix expression, where the $ symbol is used as an end marker. (To make things simpler you may assume that the input string contains no blank characters, thus all'numbers are between O and 9 only.) For example, the input could be 6523+8*+3+*$ Reading the Input Reading the input is a bit tricky because there are both integers and characters present. One way to do this, is read the input entirely as characters, nd then convert those characters which represent numbers between O and 9 into int. To read characters one by one you could use something like while (istream && ((istream . peek ( ) ) != ,\$')) istream c; irt Stack Implementation You may write your own stack using a dynamic erray, or you may use the list class from the book. Output of the program The program will write the result of the expression (in the example 288), or the string This is not a valid postfix expression (if the expression is not valid)
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started