/*************************************************************************
> File Name: any_stack2.h
> Author:
> Mail:
> Created Time: 2018年02月28日 星期三 10时50分04秒
************************************************************************/
#ifndef _15_ANY_STACK_H
#define _15_ANY_STACK_H
#include <stdlib.h>
#include <string.h>
#define STACK_OK 1
#define STACK_ERROR 0
typedef struct Stack {
char *data;
int data_size;
int size, top;
} Stack;
#define init_stack(n, T) (__init_stack(n, sizeof(T)))
#define push_stack(s, data) (__push_stack(s, (char *)(data)))
#define top_stack(s, T) ((T *)(__top_stack(s)))
Stack *__init_stack(int n, int data_size) {
Stack *s = (Stack *)malloc(sizeof(Stack) * 1);
s->data = (char *)malloc(n * data_size);
s->data_size = data_size;
s->size = n;
s->top = -1;
return s;
}
int __push_stack(Stack *s, char *data) {
if (s->size - 1 == s->top) {
return STACK_ERROR;
}
s->top += 1;
memcpy(s->data + s->top * s->data_size, data, s->data_size);
return STACK_OK;
}
int empty_stack(Stack *s) {
return s->top == -1;
}
char *__top_stack(Stack *s) {
if (empty_stack(s)) {
return NULL;
}
return s->data + s->top * s->data_size;
}
int pop_stack(Stack *s) {
if (empty_stack(s)) {
return STACK_ERROR;
}
s->top -= 1;
return STACK_OK;
}
void clear_stack(Stack *s) {
free(s->data);
free(s);
return ;
}
#endif存储任意类型的栈
最新推荐文章于 2019-03-21 12:40:02 发布
本文介绍了一个用C语言实现的自定义通用栈数据结构。该栈支持多种基本操作,包括初始化、压栈、获取栈顶元素、弹出元素、判断栈是否为空及清理栈等。文章提供了完整的源代码实现,并详细解释了各个函数的功能。
212

被折叠的 条评论
为什么被折叠?



