0
点赞
收藏
分享

微信扫一扫

红队攻防渗透技术实战流程:云安全之云原生安全:K8s安全

Python芸芸 2024-05-23 阅读 7

1 引子

请添加图片描述

2 栈的定义

请添加图片描述

3 栈的实现

3.1 栈类型定义
  • 这里pdata应该是一个数组的指针,这个数组的空间我们在栈初始化的时候再申请
typedef int DataType;

typedef struct stack
{
	DataType* pdata;
	int top;
	int capa;
}ST;
3.2 需要实现的接口
//栈的扩容
void CheckCapa(ST* pst);

//获取栈顶数据
DataType STTop(ST* pst);

//栈的判空
bool STEmpty(ST* pst);

//查看数据量
int STSize(ST* pst);

//栈的初始化
void STInit(ST* pst);

//栈的删除
void STDestroy(ST* pst);

//压栈
void STPush(ST* pst, DataType data);

//出栈
void STPop(ST* pst);
3.3 栈的初始化
  • 我们一开始给栈申请4个元素的空间,后期不够我们再扩容
//栈的初始化
void STInit(ST* pst)
{
	assert(pst);

	pst->pdata = (DataType*)calloc(4, sizeof(DataType));
	if (pst->pdata == NULL)
	{
		perror("STInit::calloc");
		exit(1);
	}
	pst->top = -1;
	pst->capa = 4;
}
3.4 栈的删除
//栈的删除
void STDestroy(ST* pst)
{
	free(pst->pdata);
	pst->pdata = NULL;
	pst->capa = 0;
	pst->top = -1;
}
3.5 栈的扩容
  • 每次申请都让栈的capa翻2倍,防止频繁申请
//栈的扩容
void CheckCapa(ST* pst)
{
	assert(pst);
	if (pst->top + 1 == pst->capa)//满了才扩容,不满就不扩容
	{
		DataType* tmp = (DataType*)realloc(pst->pdata, 2 * pst->capa * sizeof(DataType)); //每次申请都让栈的capa翻2倍,防止频繁申请
		if (tmp == NULL)
		{
			perror("CheckCapa::realloc");
			exit(1);
		}
		else
		{
			pst->pdata = tmp;
		}
		pst->capa = 2 * pst->capa;//别忘了改变一下capa
	}
}
3.6 获取栈顶数据
  • 直接返回栈顶数据就行
//获取栈顶数据
DataType STTop(ST* pst)
{
	assert(pst);
	return pst->pdata[pst->top];
}
3.7 栈的判空
  • 我们直接用表达式就行
//栈的判空
bool STEmpty(ST* pst)
{
	assert(pst);
	return pst->top + 1 == 0;//这个表达式的返回值就是true或者false
}
3.8 查看数据量
  • 直接返回top+1就行
//查看数据量
int STSize(ST* pst)
{
	assert(pst);
	return pst->top + 1;
}
3.9 入栈
  • 每次入栈的时候都要检查一下是不是满了
//入栈
void STPush(ST* pst, DataType data)
{
	CheckCapa(pst);
	(pst->top)++;
	pst->pdata[pst->top] = data;
}
3.10 出栈
  • 出栈的时候其实不需要删除元素,只需要让栈顶下移就行,下次入栈的时候直接就覆盖掉了,所以不需要手动删除元素
//出栈
void STPop(ST* pst)
{
	if (STEmpty(pst))
	{
		return;
	}
	else
	{
		(pst->top)--;
	}
}

完整实现代码

stack.h

//头文件申请
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <math.h>
#include <stdbool.h>

//类型定义

typedef int DataType;

typedef struct stack
{
	DataType* pdata;
	int top;
	int capa;
}ST;


//函数定义

//栈的扩容
void CheckCapa(ST* pst);

//获取栈顶数据
DataType STTop(ST* pst);

//栈的判空
bool STEmpty(ST* pst);

//查看数据量
int STSize(ST* pst);

//栈的初始化
void STInit(ST* pst);

//栈的删除
void STDestroy(ST* pst);

//压栈
void STPush(ST* pst, DataType data);

//出栈
void STPop(ST* pst);

stack.c

//头文件申请
#include "stack.h"

//函数定义

//栈的扩容
void CheckCapa(ST* pst)
{
	assert(pst);
	if (pst->top + 1 == pst->capa)
	{
		DataType* tmp = (DataType*)realloc(pst->pdata, 2 * pst->capa * sizeof(DataType));
		if (tmp == NULL)
		{
			perror("CheckCapa::realloc");
			exit(1);
		}
		else
		{
			pst->pdata = tmp;
		}
		pst->capa = 2 * pst->capa;
	}
}

//获取栈顶数据
DataType STTop(ST* pst)
{
	assert(pst);
	return pst->pdata[pst->top];
}

//栈的判空
bool STEmpty(ST* pst)
{
	assert(pst);
	return pst->top + 1 == 0;
}

//查看数据量
int STSize(ST* pst)
{
	assert(pst);
	return pst->top + 1;
}

//栈的初始化
void STInit(ST* pst)
{
	assert(pst);

	pst->pdata = (DataType*)calloc(4, sizeof(DataType));
	if (pst->pdata == NULL)
	{
		perror("STInit::calloc");
		exit(1);
	}
	pst->top = -1;
	pst->capa = 4;
}

//栈的删除
void STDestroy(ST* pst)
{
	free(pst->pdata);
	pst->pdata = NULL;
	pst->capa = 0;
	pst->top = -1;
}

//压栈
void STPush(ST* pst, DataType data)
{
	CheckCapa(pst);
	(pst->top)++;
	pst->pdata[pst->top] = data;
}

//出栈
void STPop(ST* pst)
{
	if (STEmpty(pst))
	{
		return;
	}
	else
	{
		(pst->top)--;
	}
}

举报

相关推荐

0 条评论