Ngăn xếp - Stack, bài 1


// stack.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// self-referential structure
struct stackNode

char* data;
struct stackNode *pNext;
};

typedef struct stackNode StackNode;
typedef StackNode *StackNodePtr;

// function prototypes
void push( StackNodePtr *pTop, char info[100] );
char* pop( StackNodePtr *pTop);
char isEmpty( StackNodePtr pTop ); 
void printStack( StackNodePtr pCurrent );

int main( void )

StackNodePtr pStack = NULL;
char string1[100];
puts("Enter the string:");
gets(string1);
push( &pStack, string1 );
printStack( pStack );
printf("The popped value is %s", pop(&pStack));
return 0;
}
void push( StackNodePtr *pTop, char info[100] )

StackNodePtr pNew;
pNew =(StackNode*)  malloc( sizeof( StackNode* ) );
if ( pNew != NULL )  

pNew->data = info;
pNew->pNext = *pTop; // insert at top of stack
*pTop = pNew;
}
else
{
printf( "%s not inserted. No memory available.\n", info );
}

char* pop( StackNodePtr *pTop)

StackNodePtr pTemp;
char *sPopValue = {0};
pTemp = *pTop; // attach a pointer to element to be removed
sPopValue = ( *pTop )->data;  
printf("popped item is %s", sPopValue);
*pTop = ( *pTop )->pNext; // remove at top of stack
free( pTemp ); // release this memory and set it free!
return sPopValue;
if(*pTop == NULL)
{
printf("Stack is empty");
}

// output stack contents to the console
void printStack( StackNodePtr pCurrent )

if ( pCurrent == NULL )
{
printf( "The stack is empty.\n\n" );
}
else

printf( "The stack is:\n" );
while ( pCurrent != NULL ) 

printf( "%s -> ", pCurrent->data );
pCurrent = pCurrent->pNext; // move to next element
}
printf( "NULL\n\n" );

}
char isEmpty( StackNodePtr pTop )

return pTop == NULL;
}