Question
Goal: Stacks and Queues to implement a programming solution Make sure you thoroughly read and understand the directions before you begin. Problem Statement A palindrome
Goal: Stacks and Queues to implement a programming solution Make sure you thoroughly read and understand the directions before you begin. Problem Statement A palindrome is a character string that is equal to its reverse. A simple palindrome would be a word that is the same spelled forward or backward such as level. A palindrome can also be a phrase such as "Never odd or even". This is not a simple palindrome, since making it the same as its reverse requires that we ignore spaces and punctuation marks. For this assignment, a palindrome is defined to be a character string, where all non-alphabetic characters are ignored, and upper-case and lower-case versions of the same letter are viewed as equivalent. Alphabetic characters includes characters A through Z and a through z inclusive. Thus punctuation marks, digits, space, tab, carriage return, hyphens, underscores, and other nonalphabetic characters are ignored in the palindrome decision process. The assignment is to write a program that does the following. You will need to define extra functions to complete some of these tasks such as the first two bullet items: ? Prompts the user to type in a character string ? Gets the characters and stores them in a stack data structure. ? Makes use of the stack and a queue data structure to check for a palindrome. ? Defines a function isPalindrome that determines whether the string is a palindrome. The function isPalindrome returns 1 if x is a palindrome, and 0 if x is not a palindrome. int isPalindrome(char *x) ? Displays an appropriate message on the screen that indicates the string and whether the string is a palindrome or not. Programming Hints ? Your program will involve three files: main.c, Palindrome.c, and Palindrome.h. o The file Palindrome.h contains exactly one line, the prototype of your function isPalindrome. o The file Palindrome.c contains the definition of your function isPalindrome. It should have your name, the date, and #include "Palindrome.h". It should not contain a main function. o Your file main.c contains your main function. That file should also specify any #include files, including Palindrome.h. Your main program should thoroughly test the Palindrome program ? The following header files must be defined and included in the source code using the stacks and queues. o #include stack.h o #include queue.h You will need to submit these 2 files with your submission of the other 3 files mentioned above. ? The following functions may be helpful and are provided by the C Standard Library: o int isalpha(char c) // returns non-zero integer if c is an alphabetic character, 0 if not o char toupper(char c) // returns the upper-case version of an alphabetic character Testing Suggestions A list of examples is given below in a C++ variable declaration. Make sure that you test for the following situations. 1. Test that your program returns a value of 1 on the examples. 2. Test that your program returns 0 if you change one of the characters in any of the examples. Examples "A dog, a panic in a pagoda" "A dog, a plan, a canal, pagoda" "A man, a plan, a canal-- Panama! // punctuation and spaces are ignored "civic" "If I had a hi-fi" "Do geese see God?" "Madam, Im Adam." "Madam, in Eden, Im Adam." "Neil, a trap! Sid is part alien!" "Never odd or even" "No devil lived on." "No lemons, no melon" "racecar" "RACEcar" // uppercase equals lowercase Rats live on no evil star." "Red rum, sir, is murder!" "Rise to vote, sir." "rotator" "rotor" "Step on no pets." "Was it a cat I saw?" "Was it a car or a cat I saw?" "Yawn a more Roman way. " Extra Credit (20 Points) ? Allow the user to choose whether to enter a string to check or a file to check ? In the case of a file, read each line of text from an input data file ? Write to the screen all lines that are palindromes with an appropriate message
//Stack.h
#ifndef STACK_H #define STACK_H #include
// Stack template template
public: //Constructor Stack(int); // Copy constructor Stack(const Stack&); // Destructor ~Stack(); // Stack operations void push(T); void pop(T &); bool isFull(); bool isEmpty(); }; //*************************************************** // Constructor * //***************************************************
template
//*************************************************** // Copy constructor * //***************************************************
template
//*************************************************** // Destructor * //***************************************************
template
//************************************************************* // Member function push pushes the argument onto * // the stack. * //*************************************************************
template
template
//************************************************************* // Member function isFull returns true if the stack * // is full, or false otherwise. * //*************************************************************
template
//************************************************************* // Member function isEmpty returns true if the stack * // is empty, or false otherwise. * //*************************************************************
template
//Queue.h
#ifndef QUEUE_H #define QUEUE_H #include
// Stack template template
// Queue operations void enqueue(T); void dequeue(T &); bool isEmpty() const; bool isFull() const; void clear(); };
//*************************************************************** // This constructor creates an empty queue of a specified size. * //*************************************************************** template
//*************************************************************** // Copy constructor * //*************************************************************** template
//*************************************************************** // Destructor * //*************************************************************** template
//*************************************************************** // Function enqueue inserts a value at the rear of the queue. * //*************************************************************** template
//*************************************************************** // Function dequeue removes the value at the front of the queue * // and copies t into num. * //*************************************************************** template
//*************************************************************** // isEmpty returns true if the queue is empty, otherwise false. * //*************************************************************** template
if (numItems) status = false; else status = true;
return status; }
//*************************************************************** // isFull returns true if the queue is full, otherwise false. * //*************************************************************** template
if (numItems < queueSize) status = false; else status = true;
return status; }
//***************************************************************** // clear sets the front and rear indices, and sets numItems to 0. * //***************************************************************** template
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