栈C语言实现

首先谈谈这个概念:

栈:是一种重要的线性结构,仅在表尾进行插入和删除的线性表。

以下是顺序栈的存储表示:

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;
}

void  pop(stack_t *stack, node_t **node)
{
 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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值