数据结构——栈(顺序栈)

        我们这里说的栈其实本质上还是一种表结构,只不过栈是一种表的特殊情况,即功能受限的表,栈是只有一个进出口的表结构,先进先出。既然它是表结构的一种,当然也分顺序存储和链式存储两种,本文主要介绍顺序栈的构建以及运算:

老规矩,先起别名

#define TYPE int

定义一下顺序栈的结构

typedef struct ArrayStack
{
	TYPE *ptr;
	size_t cap;
	size_t top;
}ArrayStack;

创建

//创建
ArrayStack *create_stack(size_t cap)
{
	ArrayStack *stack=malloc(sizeof(ArrayStack));
	stack->ptr=malloc(sizeof(TYPE)*cap);
	stack->cap=cap;
	stack->top=0;
	return stack;
}

销毁

//销毁
bool destroy_stack(ArrayStack *stack)
{
	free(stack->ptr);
	stack->ptr=NULL;
	free(stack);
	stack=NULL;
	return true;
}

入栈

//入栈
bool in_stack(ArrayStack *stack,TYPE val)
{
	if(stack->cap<=stack->top) return false;
	stack->ptr[stack->top++]=val;
	return true;
}

出栈

//出栈
bool out_stack(ArrayStack *stack)
{
	if(!stack->top) return false;
	stack->top--;
	return true;
}

栈顶

//栈顶
bool top_stack(ArrayStack *stack,TYPE *val)
{
	if(!stack->top) return false;
	*val=stack->ptr[stack->top-1];
	return true;
}

主函数里浅浅测试一下:

int main(int argc,const char* argv[])
{
	TYPE val;
	ArrayStack *stack=create_stack(10);
	for(int i=0;i<stack->cap;i++)
	{
		in_stack(stack,i+1);
	}

	//if(destroy_stack(stack)) printf("destroy success\n");
	//out_stack(stack);
	//out_stack(stack);
	int b[]={3,2,1,4,5,8,7,6,9,10};
	if(is_pop_stack(stack,b,10)) printf("b是a的出栈顺序!\n");
	else printf("b不是a的出栈顺序,请注意!\n");


	while(stack->top)
	{
		top_stack(stack,&val);
		printf("%d ",val);
		stack->top--;
	}
	
	return 0;
}

栈的应用主要分布在: 1、函数的调用、栈内存特点
                                    2、生产者和消费者模型(仓库->栈)
                                    3、表达式解析 3-3*20/2

over

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值