/*stack.h*/
- #define STACK_TYPE int
-
-
void push(STACK_TYPE value);
-
-
void pop(void);
-
-
STACK_TYPE top(void);
-
-
int is_empty(void);
-
- int is_full(void);
/*stack.c*/
- #include "stack.h"
-
#include <assert.h>
-
-
#define STACK_SIZE 100
-
-
static STACK_TYPE stack[STACK_SIZE];
-
static int top_element = -1;
-
-
-
void
-
push(STACK_TYPE value)
-
{
-
assert(is_full != 0);
-
top_element++;
-
stack[top_element] = value;
-
}
-
-
void
-
pop(void)
-
{
-
assert(is_empty != 0);
-
top_element--;
-
}
-
-
STACK_TYPE
-
top(void)
-
{
-
assert(is_empty != 0);
-
return (stack[top_element]);
-
}
-
-
int
-
is_empty(void)
-
{
-
if (-1 == top_element)
-
return 0;
-
else
-
return -1;
-
}
-
-
int
-
is_full(void)
-
{
-
if (STACK_SIZE - 1 == top_element)
-
return 0;
-
else
-
return -1;
- }
/*test.c*/
- #include <stdio.h>
-
#include "stack.h"
-
-
int
-
main(void)
-
{
-
int a[10] = {1,3,5,7,9,0,2,4,6,8};
-
int len = sizeof(a)/sizeof(a[0]);
-
int i;
-
-
printf("stack is_empty: %d\n", is_empty());
-
printf("stack is_full: %d\n", is_full());
-
printf("\n");
-
-
for (i = 0; i < len; i++) {
-
push(a[i]);
-
printf("%d,", top());
-
}
-
printf("\n");
-
-
printf("stack is_empty: %d\n", is_empty());
-
printf("stack is_full: %d\n", is_full());
-
printf("\n");
-
-
for (i = 0; i < len; i++) {
-
printf("%d,", top());
-
pop();
-
}
-
printf("\n");
-
-
printf("stack is_empty: %d\n", is_empty());
-
printf("stack is_full: %d\n", is_full());
-
printf("\n");
-
-
return 0;
- }
/*output*/
- stack is_empty: 0
-
stack is_full: -1
-
-
1,3,5,7,9,0,2,4,6,8,
-
stack is_empty: -1
-
stack is_full: -1
-
-
8,6,4,2,0,9,7,5,3,1,
-
stack is_empty: 0
- stack is_full: -1