Here's my first attempt to change from node pointers to arrays in linked list of stack.

Please be kind when criticizing and giving help.
I just don't have any examples in texts or lecture notes to know how to do this.



Code:

/*****************/
/*  stack.c      */
/****************/

#include <stdlib.h>
#include "stack.h"

struct node {

   int data;
   struct node * next;   /*  int str[MAX_SIZE];  */
};

struct node *first;       /*  struct node first[];  */
int count;

void make_empty()
{
   first = NULL;               /* first[0]=NULL;   */ 
   count = 0;
}

int is_empty(void)
{
   return count == 0;
}

int is_full(void)
{
   return 0;
}

void push(int insert_value)
{
   int i = 0;
   struct node *new_node;              /* struct node new[]; */ 

   new_node=malloc(sizeof(struct node));   /* new[0]=malloc(sizeof(struct node));   */ 
   if (new_node == NULL)  {         /* if (new[i] = NULL) {
      printf("Error in push:  stack is full.\n");
      exit (EXIT_FAILURE);
   }
   new_node->data = insert_value;  /* new[i]->data=insert_value; */ 
   new_node->next = first;   /* new[i]++=first[i];  */
   first = new_node;              /* first[i] = new[i];  */ 
   count++;
}

int pop(void)
{
  struct node * top_node;       /*  struct node top[MAX_SIZE];  */ 
  int i;

  if (is_empty())  {
     printf("Error in pop: stack is empty.\n");
     exit (EXIT_FAILURE);
  }

  top_node=first;        /* top[0] = first [i];  */
  i = first->data;          /* i = first[i];  */
  first = first->next;    /*  first[i++];  */ 
  free(top_node);       /*  free(top);  */ 
  count--;
  return i;
}

void print_list()
{
  struct node *ptr;     / * struct node list;  */ 
  if (first == NULL) {   /* if (first[0]=NULL) {  */
    printf("List is empty.\n\n");
  }

  else  {
       printf("\n\nHere is your list:  \n");
       for (ptr=first;ptr;ptr=ptr->next) /* for (list=first;list[i]<MAX_SIZE;list[i]++) */ 
           printf("%d\n",ptr->data);  /* printf("%d\n",list[i]); */ 
       return;
  }
}