顺序栈的基本操作

//定义结构
#define  INITSIZE 10;

typedef int ElemType;

typedef struct stack 
{
	ElemType  *data; //栈底指针
	int  top; //栈顶指针 -- 以数组下标来表示
	int  size; // 栈空间大小
}stack;
//初始化
void InitStack(Stack *st)
{
	if(st == NULL) exit(0);

	st->data = (ElemType *)malloc(sizeof(ElemType ));
	if(st->data == NULL)  exit(0);

	st->top = 0;
	st->size = INITSIZE ;
}
//创建新空间
static int AppendSpace(Stack *st)
{
	ElemType *s =(ElemType *)malloc(sizeof(ElemType )*st->size*2);
	//把原来st->data空间中的数据全部移到s空间上
	for(int i ; i<st->top ; ++i)
	{
		s[i] = st->data[i];
	}
	free(st->data); //将原来的内存释放,防止内存泄露的发生
	st->data = s;
	st->size*=2;
	return 1;
}
//压栈
void PushStack(Stack *st , ElemType val)
{
	if(st == NULL) exit(0);

	//栈满
	if(st->top == st->size)
	{
		if( !AppendSpace (st))
		{
			return;
		}
	}
	st->data[st->top++] = val;//相当于st->data[st->top] = val , st->top++;
}
//判空
int Empty(Stack *st)
{
	if(st == NULL) exit(0);

	return st->top == 0 ? 1 : 0 ;
}
//出栈
void PushStack(Stack *st)
{
	if(st == NULL) exit(0);
	
	if(Empty(st))  return;

	st->top--;
}
//获取栈顶元素
int Top(Stack *st , ElemType *result)
{
	if(st == NULL) exit(0);

	if(Empty(st))
	{
		return 0;
	}
	*result = st->data[st->top-1];
	return 1;
}
//销毁
void  DestroyStack(Stack *st)
{
	if(st == NULL) exit(0);

	free(st->data);
	st->data=NULL;
	st->top = st->size = 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值