, node , :
typedef struct node {
void *dataptr;
struct node *link;
} NODE;
typedef struct {
int count;
NODE *top;
} STACK;
:
STACK myStack;
myStack.count = 0;
myStack.top = NULL;
. top, , - count, top ( 0 NULL ), , , - , : -)
node , :
- node (1).
- node .
- node (3).
- (4).
, :
NODE *newNode = malloc (sizeof (NODE));
newNode->dataptr = NULL;
newNode->link = myStack.top;
myStack.top = newNode;
myStack.count++;
. , newNode.link NULL, myStack.top newNode, .
node :
, , :
NODE *popNode = myStack.top;
if (myStack.top != NULL) {
myStack.top = myStack.top->link;
myStack.count--;
}
return popNode;
node, NULL, .
. , , , .
#define STACK_ERR_OKAY 0
#define STACK_ERR_NOTEMPTY 1
#define STACK_ERR_NOPAYLOAD 2
#define STACK_ERR_NOMEMORY 3
typedef struct sNode {
void *data;
struct sNode *next;
} tNode;
typedef struct {
int count;
NODE *top;
} tStack;
tStack *stackNew (void) {
tStack stack = malloc (sizeof (tStack));
if (stack != NULL) {
stack->count = 0;
stack->top = NULL;
}
return stack;
}
int stackDel (tStack *stack) {
if (stack->top != NULL)
return STACK_ERR_NOT_EMPTY;
free (stack);
return STACK_ERR_OK;
}
int stackPush (tStack *stack, void *payload) {
if (payload == NULL)
return STACK_ERR_NOPAYLOAD;
tNode *node = malloc (sizeof (tNode));
if (node == NULL)
return STACK_ERR_NOMEMORY;
node->data = payload;
node->next = stack->top;
stack->top = node;
stack->count++;
return STACK_ERR_OK;
}
int stackPop (tStack *stack) {
tNode *node = stack->top;
if (node == NULL) {
return NULL;
stack->top = node->next;
stack->count--;
return node->data;
}
int stackSize (tStack *stack) {
return stack->count;
}
, , , , . (), :
void stackDel (tStack *stack) {
tNode *node = stackPop (stack);
while (node != NULL) {
free (node);
node = stackPop (stack);
}
free (stack);
}
, , , (, API, , ). .