======Project: Palindrome======
A project for Data Structures by Brandon Kennedy during the Fall 2011 Semester.
This project was begun on 12-7-2011 and is anticipated to take 1 day.
=====Objectives=====
The purpose of this project is to broaden my understanding of using the push, pop and peek functions of a stack and to use those functions from a pre-existing library I made.
=====Prerequisites=====
In order to successfully accomplish/perform this project, the listed resources/experiences need to be consulted/achieved:
* an understanding of the functionality of a stack structure
* an udnerstanding of a linked list structure
* matt haas
* the c programming guide
* an understanding of file I/0 processing
=====Background=====
Through this project I hope to better understand how libraries of functions can be made more general. That way i can use the same library in as many different programs as I want. This code is taken from my Data Structures EoCE where it was used for the same purpose, as a palindrome project.
=====Scope=====
This will focus specifically on character based strings that will be tested for palindromality. It will use a stack to flip the string around and compare character by character.
=====Attributes=====
State and justify the attributes you'd like to receive upon successful approval and completion of this project.
* attribute1: pointers -> this program will use pointers to nodes and arrays of characters.
* attribute2: stacks -> this program will implement a stack.
* attribute3: File I/0 -> this program will record to a file.
* attribute4: terminal I/0 -> this program will output to the terminal -> used for systems programming
=====Code=====
===main===
#include
#include
#include"stack.h"
int main()
{
FILE *fptr;
int i = 0;
int j = 0;
char *palin;
palin = malloc(sizeof(char)*(20));
Stack *mystack;
mystack = (Stack *) malloc (sizeof(Stack));
mystack -> top = mystack -> bottom = mystack -> tmp = NULL;
fptr = fopen("palindromerecords", "w");
printf("Enter string to check: ");
scanf("%s", palin);
fprintf(fptr, "Before testing: %s\n", palin);
printf("Before: %s\n", palin);
i = 0;
while(*(palin+i) != '\0')
{
mystack = push(mystack, *(palin+i));
i++;
}
printf("After: ");
fprintf(fptr, "After testing: ");
mystack -> tmp = mystack -> top;
while(mystack -> tmp != NULL)
{
fprintf(fptr, "%c", mystack -> tmp -> value);
printf("%c", mystack -> tmp -> value);
mystack -> tmp = mystack -> tmp -> next;
}
mystack -> tmp = mystack -> top;
i = 0;
while(mystack -> tmp != NULL)
{
if(mystack -> tmp -> value != *(palin+i))
{
fprintf(fptr, "\nTherefore %s is NOT a palindrome\n", palin);
printf("\n%s is NOT a palindrome\n", palin);
exit(1);
}
else
{
mystack -> tmp = mystack -> tmp -> next;
i++;
}
}
fprintf(fptr, "Therefore %s is a palindrome!", palin);
printf("\n%s is a palindrome!\n", palin);
fclose(fptr);
return 0;
}
===push.c===
#include"stack.h"
Stack *push(Stack *notes, int val)
{
Node *stick;
stick=(Node *)malloc(sizeof(Node));
stick -> value = val;
if(notes -> top == NULL)
{
notes -> top = notes -> bottom = stick;
}
else
{
notes -> top -> prev = stick;
stick -> next = notes -> top;
notes -> top = notes -> top -> prev;
}
return notes;
}
===stack.h===
#ifndef _STACK_H_
#define _STACK_H_
#include"linkedlist.h"
struct stack{
struct node *top;
struct node *bottom;
struct node *tmp;
};
typedef struct stack Stack;
int peek(Stack *);
Node *pop(Stack *);
Stack *push(Stack *, int);
#endif
===linkedlist.h===
#ifndef _LINKED_LIST_H
#define _LINKED_LIST_H
#include
#include
struct node {
char value;
struct node *next;
struct node *prev;
};
typedef struct node Node;
struct list{
struct node *start;
struct node *end;
struct node *tmp;
};
typedef struct list List;
List *copy(List *);
List *append(List *, Node *, int);
List *insert(List *, Node *, int);
Node *remov(List *, Node *);
void deletelist(List *);
Node *find(List *, int);
#endif
=====Execution=====
Again, if there is associated code with the project, and you haven't already indicated how to run it, provide a sample run of your code:
lab46:~/src/DataS/EoCE$ ./palindrome
Enter string to check: hereh
Before: hereh
After: hereh
hereh is a palindrome!
lab46:~/src/DataS/EoCE$ cat palindromerecords
Before testing: hereh
After testing: hereh
Therefore hereh is a palindrome!
lab46:~/src/DataS/EoCE$
=====Reflection=====
From this project I really just brushed up on being able to stick simple file I/0 into a program so that is records its output. This can be handy when needing to process a large amount of data dn have it print some things to the screen while recording other stuff to files. I also worked with arrays in combination with stacks to make my data structure usage versatile.
=====References=====
In performing this project, the following resources were referenced:
* wiki documents on file I/O
* Matt Haas
* the C programming guide