In my intro CS class we're reviewing data structures. I'm currently working on implementing a stack using a linked list (LIFO) in C. I'd appreciate a review of the implementation as well as of my understanding of how a stack should work.
// This program is implementation of stack data structure
// via linked list (LAST IN FIRST OUT STRUCTURE) LIFO
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node
{
char string[20];
struct node *next;
} node;
node *push(char *element, node *head);
node *pop(node *head);
void destroy_stack(node *p);
int main(void)
{
// create new stack
node *stack = NULL;
// push 6 "functions" to the stack
char *function[6] = {"first funct", "second funct", "third funct",
"fourth funct", "fifth funct", "sixt funct"};
for (int i = 0; i < 6; i++)
{
printf("function is : %s\n",function[i]);
stack = push(function[i], stack);
if (!stack)
{
fprintf(stderr,"Not enough memory space for new list");
return 1;
}
}
// display the stack
for (node *temp = stack; temp != NULL; temp = temp -> next)
{
printf("Elements of the stack are: %s\n", temp -> string);
}
// pop the elements from the stack
while (stack != NULL)
{
printf("Popped elemet is: %s\n", stack -> string);
stack = pop(stack);
}
destroy_stack(stack);
return 0;
}
node *push(char *element, node *head)
{
// create space for new element on stack
node *temp = malloc(sizeof(node));
if (!temp)
{
return NULL;
}
// if stack is empty
if (head == NULL)
{
strcpy(temp -> string, element);
temp -> next = NULL;
return temp;
}
strcpy(temp -> string, element);
temp -> next = head;
return temp;
}
node *pop(node * head)
{
// create a new head
node *newHead = head->next;
// pop the element from stack
free(head);
return newHead;
}
void destroy_stack(node *p)
{
if ( p == NULL )
{
return;
}
else
{
destroy_stack(p -> next);
}
free(p);
}