#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STACK_NUM 20
#define SUCCESS 0
#define FAILURE 1
typedef struct Stack{
void* data[STACK_NUM];
int size;
}STStack_def;
typedef void (*STACKPRINT)(void*);
STStack_def* stack_init()
{
int i = 0;
STStack_def* stack_ptr = (STStack_def*)malloc(sizeof(STStack_def));
stack_ptr->size = 0;
for (i = 0; i<STACK_NUM; i++)
{
stack_ptr->data[i] = NULL;
}
return stack_ptr;
}
int stack_push(STStack_def* stack, void* data)
{
if (stack == NULL)
{
printf("param is null\n");
return FAILURE;
}
if (stack->size == STACK_NUM)
{
return FAILURE;
}
stack->data[stack->size] = data;
stack->size++;
return 0;
}
int stack_pop(STStack_def* stack)
{
if (stack == NULL)
{
printf("param is null\n");
return FAILURE;
}
if (stack->size == 0)
{
return FAILURE;
}
stack->data[stack->size-1] = NULL;
stack->size--;
return 0;
}
void* stack_top(STStack_def* stack)
{
if (stack == NULL)
{
printf("param is null\n");
return NULL;
}
if (stack->size == 0)
{
return NULL;
}
return stack->data[stack->size-1];
}
int stack_empty(STStack_def* stack)
{
return stack->size>0 ?0:1;
}
int stack_clear(STStack_def* stack)
{
if (stack == NULL)
{
printf("param is null\n");
return FAILURE;
}
while (stack->size > 0)
{
stack->data[stack->size-1] = NULL;
stack->size--;
}
return SUCCESS;
}
void stack_destory(STStack_def* stack)
{
free(stack);
}
int stack_print(STStack_def* stack, void (*STACKPRINT)(void*))
{
if (stack == NULL)
{
printf("param is null\n");
return FAILURE;
}
while (stack->size > 0)
{
STACKPRINT(stack->data[stack->size-1]);
stack->data[stack->size-1] = NULL;
stack->size--;
}
return SUCCESS;
}
typedef struct Student{
char name[64];
int age;
}STStudent_def;
void student_print(STStudent_def* info)
{
printf("name:%s, age:%d\n", info->name, info->age);
}
int main()
{
STStack_def* stack= stack_init();
STStudent_def st1;
STStudent_def st2;
STStudent_def st3;
STStudent_def st4;
STStudent_def st5;
STStudent_def* st6 = NULL;
strcpy(st1.name, "刘备");
st1.age = 40;
strcpy(st2.name, "关羽");
st2.age = 35;
strcpy(st3.name, "张飞");
st3.age = 30;
strcpy(st4.name, "赵云");
st4.age = 25;
strcpy(st5.name, "诸葛亮");
st5.age = 45;
printf("empty:%d\n", stack_empty(stack));
stack_push(stack, &st1);
stack_push(stack, &st2);
stack_push(stack, &st3);
stack_push(stack, &st4);
stack_push(stack, &st5);
printf("empty:%d\n", stack_empty(stack));
st6 = (STStudent_def*)stack_top(stack);
printf("st6.name=%s, st6.age=%d\n", st6->name, st6->age);
stack_print(stack, student_print);
printf("empty:%d\n", stack_empty(stack));
stack_destory(stack);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SUCCESS 0
#define FAILURE 1
typedef struct Node{
struct Node *next;
}STNode_def;
typedef struct LinkStack{
struct Node head;
int size;
}STLinkStack_def;
typedef void (*STACKPRINT)(void*);
STLinkStack_def* stack_init()
{
int i = 0;
STLinkStack_def* stack_ptr = (STLinkStack_def*)malloc(sizeof(STLinkStack_def));
stack_ptr->size = 0;
stack_ptr->head.next = NULL;
return stack_ptr;
}
int stack_push(STLinkStack_def* stack, STNode_def* data)
{
if (stack == NULL)
{
printf("param is null\n");
return FAILURE;
}
data->next = stack->head.next;
stack->head.next = data;
stack->size++;
return 0;
}
int stack_pop(STLinkStack_def* stack)
{
int pos = 0;
if (stack == NULL)
{
printf("param is null\n");
return FAILURE;
}
if (stack->size == 0)
{
return FAILURE;
}
STNode_def* p = &(stack->head);
stack->head.next = p->next->next;
stack->size--;
return 0;
}
void* stack_top(STLinkStack_def* stack)
{
if (stack == NULL)
{
printf("param is null\n");
return NULL;
}
return stack->head.next;
}
int stack_empty(STLinkStack_def* stack)
{
return stack->size>0 ?0:1;
}
int stack_clear(STLinkStack_def* stack)
{
if (stack == NULL)
{
printf("param is null\n");
return FAILURE;
}
stack->head.next = NULL;
stack->size = 0;
return SUCCESS;
}
void stack_destory(STLinkStack_def* stack)
{
free(stack);
}
int stack_print(STLinkStack_def* stack, void (*STACKPRINT)(STNode_def*))
{
if (stack == NULL)
{
printf("param is null\n");
return FAILURE;
}
STNode_def* p = &(stack->head);
while (p->next != NULL)
{
p = p->next;
STACKPRINT(p);
}
return SUCCESS;
}
typedef struct Student{
STNode_def node;
char name[64];
int age;
}STStudent_def;
void student_print(STStudent_def* info)
{
printf("name:%s, age:%d\n", info->name, info->age);
}
int main()
{
STLinkStack_def* stack= stack_init();
STStudent_def st1;
STStudent_def st2;
STStudent_def st3;
STStudent_def st4;
STStudent_def st5;
STStudent_def* st6 = NULL;
strcpy(st1.name, "刘备");
st1.age = 40;
strcpy(st2.name, "关羽");
st2.age = 35;
strcpy(st3.name, "张飞");
st3.age = 30;
strcpy(st4.name, "赵云");
st4.age = 25;
strcpy(st5.name, "诸葛亮");
st5.age = 45;
printf("empty:%d\n", stack_empty(stack));
stack_push(stack, &st1);
stack_push(stack, &st2);
stack_push(stack, &st3);
stack_push(stack, &st4);
stack_push(stack, &st5);
printf("empty:%d\n", stack_empty(stack));
st6 = (STStudent_def*)stack_top(stack);
printf("st6.name=%s, st6.age=%d\n", st6->name, st6->age);
stack_print(stack, student_print);
printf("empty:%d\n", stack_empty(stack));
stack_clear(stack);
printf("empty:%d\n", stack_empty(stack));
stack_destory(stack);
return 0;
}