======Palindrome Program======
A project for Data Structures by Dave Schoeffler during the Fall 2011 semester.
This project was begun on December 4th and was finished on December 5th.
=====Objectives=====
This project will utilize my Stack Library in creating a program that will check a string to determine whether it is a palindrome or not.
=====Prerequisites=====
In order to successfully accomplish/perform this project, the listed resources/experiences need to be consulted/achieved:
* Understanding the C programming language
* Be familiar with my Stack library
=====Background=====
In the course of my computer programming experience, I have done a couple different palindrome programs. One of those used
array indexing while the other used recursion. This time I will be using stacks to do this task.
=====Scope=====
My program will function as follows. I will accept a string from the user. I will then utilize my Stack Library
to find whether the string is a palindrome or not. I will push() the string I get into two stacks. I will then pop()
one of the stacks into a 3rd stack. Now stack one and three contain the string forwards and backwards. I will then pop()
off the top nodes of each of the stacks comparing the values each time. If ever there is a time when the two
popped nodes are not equal, I know that the string is not a palindrome.
I will then display the results to the user.
=====Attributes=====
The following attributes will be used in my program.
* pointers: A pointer will be used to mark the beginning of the array
* malloc/new: You must allocate memory for the array
* Stacks: this program utilize my stack library
* linked lists: my stack library utilizes linked lists
* libraries: This program uses a non core libc library
=====Code=====
===palindrome.c===
/***********************************************************
* Author: Dave Schoeffler *
* This program will will check to see whether a given *
* string is a palindrome. It will utilize my own stack.h *
* header file to do this. *
* *
* Compile with: gcc -o palindrome palindrome.c -lstack -L. *
* *
* Execute with: ./palindrome *
* *
***********************************************************/
#include
#include
#include "stack.h"
int count(char *);
int main()
{
//declaration of 3 stacks that will be used to determine if a string is a palindrome
Stack *stack1;
Stack *stack2;
Stack *stack3;
stack1 = stack2 = stack3 = NULL;//initialize them to NULL
//The max size string allowed is 50 characters
char *ch;
ch = malloc(sizeof(char)*50);
int length, i, flag = 0;
printf("Enter a string: ");
scanf("%s",ch);
length = count(ch);// function count() returns the length of the string given
for(i = 0; i < length; i++)//for loop loads the string into stack1
{
stack1 = push(stack1, *(ch+i));
}
for(i = 0; i < length; i++)//for loop loads string into stack3
{
stack3 = push(stack3, *(ch+i));
}
for(i = 0; i < length; i++)//for loop loads the values from stack one into
{ // stack2 in reverse order
stack2 = push(stack2,pop(stack1));
}
for(i = 0; i < length; i++)//for loop loads the string back into stack1
{
stack1 = push(stack1,*(ch+i));
}
//this for loop pops values from stack1 and stack2. if at any point there
//is an inequality, flag is set to 1 indicating that the string is not a
//palindrome.
for( i = 0; i < length; i++)
{
if(pop(stack1) != pop(stack2))
{
flag = 1;
}
}
//prints out the string in order and in reverse order
printf("Before: %s\n", ch);
printf("After: ");
for( i = 0; i < length; i++)
{
printf("%c",pop(stack3));
}
//prints whether the string is a palindrome or not.
printf("\n\"%s\"", ch);
if(flag == 1)
{
printf(" is not a palindrome.\n");
}
else
{
printf(" is a palindrome.\n");
}
return (0);
}
// function count() receives as input a string and returns the number
// of characters in that string as an int
int count(char *string)
{
int letterCount = 0;
while(string[letterCount] != '\0')
{
letterCount++;
}
return letterCount;
}
=====Execution=====
In the execution of my code, I ran the program twice entering different values each time.
lab46:~/src/data/eoce/0x1$ ./palindrome
Enter a string: racecar
Before: racecar
After: racecar
"racecar" is a palindrome.
lab46:~/src/data/eoce/0x1$ ./palindrome
Enter a string: datastructures
Before: datastructures
After: serutcurtsatad
"datastructures" is not a palindrome.
lab46:~/src/data/eoce/0x1$
=====Reflection=====
Doing this palindrome project has been a cool experience. I have been able to practice using a stack library that I created which was pretty cool.
I didn't find to many challenges in this project which I think has to do with being more familiar with linked data structures.
Overall this was a fun little project to do.
=====References=====
In performing this project, the following resources were referenced:
* [[http://lab46.corning-cc.edu/user/dschoeff/portfolio/libstack]]