首先谈谈这个概念:
栈:是一种重要的线性结构,仅在表尾进行插入和删除的线性表。
以下是顺序栈的存储表示:
typedef struct{
Datastruct *top;
Datastruct *base;
int size
}stack_t;
/*以下是创建一个栈*/
int creat_stack(int size, stack_t **stack)
{
stack_t *stack_name = NULL;
stack_name = (stack_t *)malloc(sizeof(stack_t));
if(NULL == stack_name)
{
printf("stack_name = NULL");
return -1;
}
stack_name->base = (node_t *)malloc(sizeof(Datastruct) * size);
if(stack_name->base == NULL)
{
printf("stack_name->base = NULL");
return -1;
}
else
{
stack_name->top = stack_name->base;
stack_name->stack_size = size;
}
*stack = new_stack;
return 0;
}
/***销毁一个堆栈***/
void destory_stack(stack_t *stack_name)
{
Datastruct *node = NULL;
if(NULL == stack_name)
{
;
}
if(stack_name->top > stack_name->base)
{
for(node = (--stack_name->top); node > stack_name->base; node--)
{
free(node);
node = NULL;
}
}
free(stack_name);
stack_name = NULL;
}
{
if(NULL == stack || stack->base == stack->top)
{
printf("stack == NULL");
}
*node = (--stack->top);
return ;
}
void push(stack_t *stack, node_t *node)
{
if(stack->top - stack->base > stack->stack_size)
{
;
}
*stack->top = *node;
stack->top++;
}
int main()
{
stack_t *new_stack = NULL;
new_stack = create_stack(10);
printf("%p\n", new_stack->top);
node_t node, *node1;
node1 = (node_t *)malloc(sizeof(node_t));
node.id = 2;node.type=3;
push(new_stack, &node);
printf("%d, %d\n", (new_stack->top - new_stack->base),new_stack->base->id);
pop(new_stack, &node1);
printf("%d\n", (node1->id));
return 0;
}