my goal is to test if the string inputted by the user is palindrome or not using stack and queue..but now i am having a trouble in my queue program...can you please check my code and tell me what is the problem...thank you..
here's my code:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
typedef struct stack {
char value;
struct stacknode *next;
}STACK_NODE;
typedef struct ListNode {
char element;
struct ListNode *next;
}ListNode;
typedef struct Q {
ListNode *frontOfQueue;
ListNode *rearOfQueue;
int numElements;
} Queue;
void initStack(STACK_NODE** head);
void push(STACK_NODE** head, char input);
void stackfunction(char* input);
int isEmptyStack(STACK_NODE** head);
void initQueue(Queue *q);
void enqueue(Queue *q, char input);
int IsEmptyQ(Queue* q);
void queuefunction(char *input);
main()
{
char* string = (char*)malloc(MAX+1* sizeof(char));
char* stringq = (char*)malloc(MAX+1* sizeof(char));
char option;
do
{
printf("\n\tInput string: ");
fflush(stdin);
gets(string);
stackfunction(string);
queuefunction(stringq);
printf("\n\tstack: %s",string);
printf("\n\tqueue: %s",stringq);
printf("\n\n\tDo you want to continue? [Y/N]: ");
option=getchar();
}while(toupper(option)=='y');
printf("\n\n\tProgram Terminated...\n");
return 0;
}
void initStack(STACK_NODE** head){
*head = NULL;
}
void push(STACK_NODE** head, char input){
STACK_NODE* temp = (STACK_NODE*)malloc(sizeof(STACK_NODE));
temp->value =input;
temp->next = *head;
*head = temp;
}
int isEmpty(STACK_NODE** head){
if(*head==NULL){
printf("Stack is empty!");
return 1;
}
}
void stackfunction(char* input){
STACK_NODE* head = (STACK_NODE*)malloc(sizeof(STACK_NODE));
initStack(&head);
while(*input != '\0') {
push(&head,*input);
input++;
}
}
void queuefunction(char *input){
Queue* head = (Queue*)malloc(sizeof(Queue));
initQueue(&head);
while(*input != '\0') {
enqueue(&head,*input);
input++;
}
}
void initQueue(Queue *q){
q->frontOfQueue = NULL;
q->rearOfQueue = NULL;
q->numElements=0;
}
void enqueue(Queue *q, char input) {
ListNode *temp= (ListNode*)malloc(sizeof(ListNode));
//out of memory
if (temp == NULL){
printf("error");
return;
}
//add element to listnode
temp->element =input;
temp->next=NULL;
if(IsEmptyQ(&(*q))){
q->frontOfQueue = temp;
q->rearOfQueue = temp;
}
else {
q->rearOfQueue->next = temp;
q->rearOfQueue = temp;
}
q->numElements++;
}
int IsEmptyQ(Queue* q)
{
return(q->frontOfQueue==NULL);
}
