Data Structure--栈的接口实现(详细)

栈就是简单地用容器的方式来理解这一种方式,主要就是后进先出
在这里插入图片描述

栈的基本结构

typedef int STDataType;

typedef struct stack{

	STDataType* _data;	//存放数据
	int _size;			//存放数量
	int _capacity;		//最大容量
}stack;

接口声明

栈这里的部分接口就是我们之前讲过的,我挑重点的进行讲解,其他的直接贴代码

//1.初始化
void stackInit(stack* st);
//2.检查容量
void checkCapacity(stack* st);
//3.入栈
void stackPush(stack* st, STDataType val);
//4.出栈
void stackPop(stack* st);
//5.获取栈顶元素
STDataType stackTop(stack* st);
//6.判空
int stackEmpty(stack* st);
//7.栈大小
int stackSize(stack* st);

接口实现

1.初始化
void stackInit(stack* st){
	
	if (st == NULL)		//判空
		return;

	st->_data = NULL;	//将空间变为空
	st->_size = st->_capacity = 0;	//大小变为0

}
2.检查容量
void checkCapacity(stack* st){

	if (st->_size == st->_capacity){	//在存储的元素和最大内存量相等的时候就要开辟空间
		//判断是开辟一个还是直接扩大一倍
		int newCapacity = st->_capacity == 0 ? 1 : 2 * st->_capacity;
		//直接用realloc直接初始化为0
		st->_data = (STDataType*)realloc(st->_data, sizeof(STDataType)*newCapacity);
		//将原来的指向为新开辟的空间
		st->_capacity = newCapacity;
	
	}
}
3.入栈
void stackPush(stack* st, STDataType val){

	if (st == NULL)		//判空
		return;
		
	checkCapacity(st);	//检查

	st->_data[st->_size++] = val;	//size++直接赋值就可以,简单

} 
4.出栈
void stackPop(stack* st){

	if (st == NULL)		//判空
		return;

	if (st->_size > 0){	
		
		st->_size--;	//直接让size-1就可以删掉顶部的一个元素
	}
}
5.获取栈顶元素
STDataType stackTop(stack* st){
	
	return st->_data[st->_size - 1];	//直接输出size-1在data里面对应的数据即可
}
6.判空
int stackEmpty(stack* st){
	
	if (st == NULL || st->_size == 0)
		return 1;		//为空返回1
	else
		return 0;
}

7.栈大小
int stackSize(stack* st){
	
	if (st == NULL)
		return 0;
		//判空没问题直接输出size即可
	return st->_size;
}

对于栈这里的接口比较简单,主要就是对水瓶式的样子的理解,主要理解下后进先出,其他的都比较简单,一起加油!!!多敲代码 !!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值