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; }



LinkBack URL
About LinkBacks




