C语言实现栈的操作

首先先定义一个栈

#define SIZE 20
#define ADD_SIZE 10

typedef  char  ElemType;
typedef  struct  stack
{
	ElemType  *top;				//定义一个头指针
	
	ElemType  *base;			//定义一个尾指针
	
	int  stack_size;			//栈的长度,初始化为10
};

初始化一个栈

void  initstack(stack *s)
{
	s->base=(ElemType *)malloc(SIZE*sizeof(ElemType));
	if(!s->base)			//分配失败,退出
	{
		exit(0);
	}
	s->top=s->base;		//使头指针指向尾指针
	
	s->stack_size=SIZE;	//定义栈的长度
}

入栈的操作

void  push(stack *s,char e)
{
	if(s->top-s->base>=SIZE)
	{
		s->base=(ElemType *)realloc(s->base,(SIZE+ADD_SIZE)*sizeof(ElemType));			//栈的长度不够,再增加长度
			if(!s->base)						//分配失败,退出																						
			{
				exit(0);
			}
	}
	*(s->top)=e;						//把先进入的数据插入
	s->top++;						//头指针向上走一步,为下次插入准备
}

出栈的操作

void  pop(stack *s,char *e)
{
	if(s->top==s->base)				//当头指针和尾指针相同时,表示到了栈底,返回退出
	{
		return;
	}
	*e=*--(s->top);					//出栈
}

测量栈当前的长度

int stacklen(stack s)
{
	return (s.top-s.base);			//直接头指针减去尾指针
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值