数据结构设计:
typedef struct stack_node
{
struct stack_node* next;
void* data;
}stack_node;
typedef struct stack
{
struct stack_node* top;
int length;
}stack;
接口:
//创建栈
stack* createStack();
//入栈
stack* stack_push(stack* stack, void* data);
//出栈
void* stack_pop(stack* stack);
//清空栈中所有元素
void stack_empty(stack* stack);
//删除栈
void stack_release(stack* stack);
接口实现:
stack *createStack()
{
stack* stack = (struct stack*)malloc(sizeof(struct stack));
if (stack == NULL)
return NULL;
stack->top = NULL;
stack->length = 0;
return stack;
}
stack* stack_push(stack* stack,void* data)
{
stack_node* newNode = (struct stack_node*)malloc(sizeof(struct stack_node));
if (newNode == NULL)
return NULL;
newNode->data = data;
newNode->next = stack->top;
stack->top = newNode;
stack->length++;
return stack;
}
void* stack_pop(stack* stack)
{
if (stack == NULL)
return NULL;
stack_node* cur = stack->top;
if (cur == NULL)
return NULL;
void* data = cur->data;
stack->top = cur->next;
free(cur);
stack->length--;
return data;
}
void stack_empty(stack* stack)
{
if (stack == NULL)
return ;
stack_node* cur;
stack_node* next;
cur = stack->top;
while (stack->length--)
{
next = cur->next;
free(cur);
cur = next;
}
stack->length = 0;
stack->top = NULL;
return;
}
void stack_release(stack* stack)
{
stack_empty(stack);
free(stack);
return;
}
测试:
int main()
{
char a = 'a';
char b = 'b';
char c = 'c';
//创建栈
stack* stack = createStack();
printf("%p\n", stack_pop(stack));
//压栈
stack_push(stack, &a);
stack_push(stack, &b);
stack_push(stack, &c);
//出栈
while (stack->length>0)
{
printf("%c\n", *(char*)stack_pop(stack));
}
//压栈出栈
stack_push(stack, &a);
stack_empty(stack);
printf("%p\n",stack_pop(stack));
//删除栈
stack_release(stack);
return 0;
}