栈的顺序和链式的实现

一、栈的顺序存储

1、

栈(Stack)是一个后进先出(Last in first out,LIFO)的线性表,它要求只在表尾进行删除和插入操作。也就是一个特殊的线性表(顺序表、链表。

  • 栈的元素必须“后进先出”。
  • 栈的操作只能在这个线性表的表尾进行。

    1.1基本操作

    1)初始化栈

    2)入栈

    3)出栈

    4)返回栈的大小

    5)返回栈顶元素

    6)判断栈是否为空

    7)销毁栈


    操作  1.2初始化栈
seqStack init_Stack()
{
	struct sStack* myStack = malloc(sizeof(struct sStack));
	if (myStack == NULL)
	{
		return NULL;
	}
	memset(myStack->data, 0, sizeof(void*) * Max);
	myStack->m_size = 0;
	return myStack;
}

入栈

void push_Stack(seqStack stack, void* data)
{
	if (stack == NULL||data==NULL)
	{
		return;
	}
	//尾插
	struct sStack* myStack = stack;
	if (myStack->m_size == Max)
	{
		return;
	}
	myStack->data[myStack->m_size] = data;
	myStack->m_size++;
}

出栈 并且将栈的数组逐个置为空,同时栈的大小逐个减少

void pop_Stack(seqStack stack)
{
	if (stack == NULL)
	{
		return;
	}
	struct sStack* myStack = stack;
	if (myStack->m_size == 0)
	{
		return;
	}
	myStack->data[myStack->m_size - 1] = NULL;
	myStack->m_size--;
}

返回栈

int size_Stack(seqStack stack)
{
	if (stack == NULL)
	{
		return -1;
	}
	struct sStack* myStack = stack;
	return myStack->m_size;
}

返回栈顶元素

void* top_Stack(seqStack stack)
{
	if (stack == NULL)
	{
		return NULL;
	}
	struct sStack* myStack = stack;
	if (myStack->m_size == 0)
	{
		return NULL;
	}
	return myStack->data[myStack->m_size-1];
}

栈顶元素即为最后入栈的元素,所以取数组中下标最大元素 


 判断栈并且销毁栈


int isEmpty_Stack(seqStack stack)
{
	if (stack == NULL)
	{
		return -1;
	}
	struct sStack* myStack = stack;
	if (myStack->m_size == 0)
	{
		return 1;
	}
	return 0;
}

//这里如果栈原始为空返回-1,栈中元素个数为0返回1,否则返回0

void destory_Stack(seqStack stack)
{
	if (stack == NULL)
	{
		return;
	}
	free(stack);
	stack = NULL;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值