实现栈的各种基本运算的算法(数据结构)

栈的特点是先入后出,后进先出。

(1)静态栈的创建

cpp 复制代码
//静态栈

#define 10 N
#define int STDataType

typedef struct ST{
    STDataType a[N];
    int top;//栈顶元素
}Stack;

(2)动态栈的创建(本文代码基于动态栈)

cpp 复制代码
//动态栈
#define int STDataType

typedef struct ST {
	STDataType* _a;
	int _top;//栈顶元素
	int _capacity;//最大容量
}Stack;

(3)初始化栈

cpp 复制代码
//初始化栈
void StackInit(Stack* pst)
{
	assert(pst);
	pst->_a = NULL;
	pst->_top = 0;
	pst->_capacity = 0;
}

(4)入栈

cpp 复制代码
//入栈
void StackPush(Stack* pst, STDataType x)
{
	assert(pst);
	if (pst->_top == pst->_capacity)
	{
		STDataType newcapacity = pst->_capacity == 0 ? 4 : (pst->_capacity * 2);
		STDataType* temp = (STDataType*)realloc(pst->_a, sizeof(STDataType) * newcapacity);
		if (temp == NULL)
		{
			printf("realloc fail\n");
			exit(-1);
		}
		pst->_a = temp;
		pst->_capacity = newcapacity;
	}
	pst->_a[pst->_top] = x;
	pst->_top++;
}

(5)出栈

cpp 复制代码
//出栈
void StackPop(Stack* pst)
{
	assert(pst);
	assert(pst->_top > 0);
	pst->_top--;
}

(6)获取栈顶元素

cpp 复制代码
//获取栈顶元素
STDataType StackTop(Stack* pst)
{
	assert(pst);
	assert(pst->_top>0);
	return pst->_a[pst->_top-1];
}

(7)获取栈的有效个数

cpp 复制代码
//出栈
void StackPop(Stack* pst)
{
	assert(pst);
	assert(pst->_top > 0);
	pst->_top--;
}

(8)判断栈是否为空

cpp 复制代码
//判断栈是否为空,是返回1,非空返回0
bool StackEmpty(Stack* pst)
{
	assert(pst);
	if (pst->_top == 0)
		return true;
	else
		return false;
}

(9)打印栈

cpp 复制代码
//打印栈
void StackPrint(Stack* pst)
{
	while (!StackEmpty(pst))
	{
		printf("%d\n", StackTop(pst));
		StackPop(pst);
	}
}

(10)销毁栈

cpp 复制代码
//销毁栈
void StackDestory(Stack* pst)
{
	assert(pst);
	free(pst->_a);
	pst->_a = NULL;
	pst->_top = pst->_capacity = 0;
}
相关推荐
青 春 记 忆2 分钟前
LeetCode 206. 反转链表|Python 解法详解
python·leetcode·链表
mlidongfeng9 分钟前
[AI][昇腾950]TP(Transport Layer,传输层)学习笔记
笔记·学习
小弥儿15 分钟前
GPT Image 2 提示词库,把散落的生图提示词变成工程资产
开发语言·javascript·gpt·学习
CQU_JIAKE22 分钟前
8.23【A】
算法
sprlightning33 分钟前
LHDC V5 算法深度解析
算法·fft·lhdcv5·imdct·mdct·rice·fac
汇智信科34 分钟前
Java 开发汇智网络化学习系统 (E‑Learning) 技术特性与应用场景解析
人工智能·学习·架构·汇智信科·fastclaw·汇智龙虾
csdn_aspnet1 小时前
C# 第k个最小元素(K’th Smallest Element)
算法·c#·排序算法
BioRunYiXue1 小时前
RACE技术全攻略:从全长克隆到靶基因验证
java·javascript·网络·人工智能·科技·算法·eclipse
poiu12346571 小时前
中医执业医师考试如何选择培训课程|2026主流机构客观测评
学习
MartinYeung51 小时前
[论文学习]BadRobot:物理世界中具身大语言模型智能体的越狱攻击
人工智能·学习·语言模型