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);
}
效果预览
总结
以上就是今天要讲的内容,拓展栈操作还是比较简单的,而且统一一套接口,即可以当作数组也可以当作栈使用。