Hello, I've been learning stack ADT from one of the books and I've written the following stack programs which works fine if the "print(stack)" is called after "popStack(stack)."
However if I call "print(stack)" before "popStack(stack)", something goes wrong. Could you please help, below is the code for the same.
Thanks in advance.
Code:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
typedef struct node
{
void *dataPtr;
struct node *link;
}STACK_NODE;
typedef struct
{
int count;
STACK_NODE *top;
}STACK;
STACK *createStack(void)
{
STACK *stack;
stack = (STACK *)malloc(sizeof(STACK));
if(stack)
{
printf("Stack created successfully. . .");
stack->count = 0;
stack->top = NULL;
}
return stack;
}
void pushStack(STACK *stack, void *dataInPtr)
{
STACK_NODE *newNode;
if(newNode = (STACK_NODE *)malloc(sizeof(STACK_NODE)))
{
printf("\n\n%d pushed onto Stack successfully.", (int *)dataInPtr);
newNode->dataPtr = dataInPtr;
newNode->link = stack->top;
stack->top = newNode;
(stack->count)++;
}
}
void print(STACK *stack)
{
STACK *temp;
temp = stack;
printf("\n\n");
while(temp->top != NULL)
{
printf("%d\n", temp->top->dataPtr);
temp->top = temp->top->link;
}
free(temp);
}
void *popStack(STACK *stack)
{
STACK_NODE *temp;
void *dataOutPtr;
if(stack->count == 0)
dataOutPtr = NULL;
else
{
temp = stack->top;
dataOutPtr = stack->top->dataPtr;
stack->top = stack->top->link;
(stack->count)--;
free(temp);
}
return dataOutPtr;
}
int main(void)
{
STACK *stack;
stack = createStack();
pushStack(stack, 10);
pushStack(stack, 20);
//print(stack);
printf("\n\nElement popped is %d", (int *)popStack(stack));
print(stack);
getch();
return 0;
}