c语言 实现切片数组-拓展栈操作

c语言集合类

第一章 切片
第二章 栈(本章)



前言

有了上一章的切片后,已经有了动态数组功能,接下来需要实现栈的功能,在go语言中切片可以直接当栈使用,在c语言中则需要添加一个额外操作,弹出栈顶元素。


一、接口添加

上一章基础上添加

1、弹出尾部

对于动态数组只需要添加一个弹出尾部操作即可实现栈。

/// <summary>
/// 弹出尾部元素
/// </summary>
/// <param name="a">切片数组</param>
/// <returns>切片数组</returns>
#define pop_back(a) _slice_popBack(a)

二、添加代码

上一章基础上添加
slice.h

/// <summary>
/// 弹出尾部元素
/// </summary>
/// <param name="a">切片数组</param>
/// <returns>切片数组</returns>
#define pop_back(a) _slice_popBack(a)
void* _slice_popBack(void* array);

slice.c

void _slice_popBack(void* array)
{
	if (array)
	{
		Slice* slice = (Slice*)array - 1;
		if(slice->length>0)
		slice->length--;
	}
	return array;
}

三、使用示例

1、入栈出栈

#include"slice.h"
#include<stdio.h>
void main() {
	int* a = NULL;
	//入栈
	for (int i = 0; i < 5; i++)
	{	
		a = append(a, i);
		//打印栈顶元素
		printf("%d ", a[len(a)-1]);
	}
	printf("\n");
	//出栈
	for (int i = 0; i < 5; i++)
	{
	    //打印栈顶元素
		printf("%d ", a[len(a)-1]);
		a=pop_back(a);
	}
	//销毁切片
	unmake(a);
}

效果预览
在这里插入图片描述


总结

以上就是今天要讲的内容,拓展栈操作还是比较简单的,而且统一一套接口,即可以当作数组也可以当作栈使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeOfCC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值