/*stack.h*/
- #define STACK_TYPE int
-
-
void create_stack(void);
-
-
void push(STACK_TYPE value);
-
-
void pop(void);
-
-
STACK_TYPE top(void);
-
-
int is_empty(void);
-
-
int is_full(void);
-
- void destory_stack(void);
/*stack.c*/
- #include "stack.h"
-
#include <assert.h>
-
#include <stdlib.h>
-
-
#define TRUE 0
-
#define FALSE -1
-
-
struct _node {
-
STACK_TYPE value;
-
struct _node *next;
-
};
-
typedef struct _node stackNode;
-
-
static stackNode *stack;
-
-
void
-
create_stack(void)
-
{
-
stack = NULL;
-
}
-
-
void
-
push(STACK_TYPE value)
-
{
-
stackNode *new_node;
-
new_node = malloc(sizeof(stackNode));
-
assert(NULL != new_node);
-
new_node->value = value;
-
new_node->next = stack;
-
stack = new_node;
-
}
-
-
void
-
pop(void)
-
{
-
assert(is_empty() != TRUE);
-
stackNode *tmpNode;
-
tmpNode = stack;
-
stack = stack->next;
-
free(tmpNode);
-
}
-
-
STACK_TYPE
-
top(void)
-
{
-
assert(is_empty() != TRUE);
-
return (stack->value);
-
}
-
-
int
-
is_empty(void)
-
{
-
if (stack == NULL)
-
return TRUE;
-
else
-
return FALSE;
-
}
-
-
-
int
-
is_full(void)
-
{
-
return FALSE;
-
}
-
-
void
-
destory_stack(void)
-
{
-
while (is_empty() != TRUE)
-
pop();
- }
/*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;
-
-
create_stack();
-
-
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");
-
-
destory_stack();
-
-
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