stack implementation - Hello World
This is not the right way to do the things..But.. it works.. doesn't?
first a header/source file
/*
* file: table.h
*/
#ifndef TABLE_H
#define TABLE_H
#ifdef DATATYPE
#ifdef BTMAXSIZE
#include <stdlib.h>
#include <err.h>
struct book_strc {
DATATYPE data;
struct book_strc * prev;
} book_stack;
/* Book table */
static struct book_strc * book_table[BTMAXSIZE];
/* Number of stacks in table */
static unsigned int tablen = 0;
void *
xmalloc (size_t siz)
{
register void * pool = malloc (siz);
if (!pool)
err (1, "xmalloc");
return pool;
}
void
bspush (unsigned int tentry, DATATYPE val)
{
struct book_strc * new = (struct book_strc *) xmalloc (sizeof (struct book_strc));
new->data = val;
new->prev = book_table[tentry];
tablen++;
book_table[tentry] = new;
}
void
bspop (unsigned int tentry, DATATYPE * val)
{
* val = book_table[tentry]->data;
struct book_strc * tmp = book_table[tentry];
book_table[tentry] = book_table[tentry]->prev;
free (tmp);
tablen--;
}
#endif
#endif
#endif
and a main program using it ..
#include <stdio.h>output:
#include <stdlib.h>
#define BTMAXSIZE 100
#define DATATYPE char*
#include "table.h"
int
main (void)
{
char str1[] = "Hello";
char str2[] = "World";
char * str3, * str4;
bspush (0, str1);
bspush (1, str2);
bspop (1, &str4);
bspop (0, &str3);
printf ("%s %s\n", str3, str4);
return 0;
}
Hello World
Usage:
You declare 2 macros
BTMAXSIZE -> this is the max size of the array of stacks
DATATYPE -> this is the data type of stack objects
then you include the file table.h
this file implement a array of stacks that hold objects of same data type
The design idea is a book table where the stacks are
you can put a book at top of stack by passing the stack number and the object like
bspush (0, 100);
and then retrieve the same item by calling bspop with the number of same stack
and a address of same type object to put the result.. like:
bspop (0, &i);