数据结构:动态栈

动态栈

实现基于动态栈的以下操作:

  1. 栈的初始化
  2. 入栈
  3. 出栈
  4. 获取栈顶元素
  5. 有效元素个数
  6. 判断是否为空
  7. 销毁栈

代码如下:
引入头文件,定义动态栈

#pragma once

typedef int SDataType;

typedef struct Stack
{
	SDataType* _array;
	int _capacity;
	int _size; // 表示栈中有效元素的个数 代表栈顶位置 
}Stack;

//初始化
void StackInit(Stack* ps);
//入栈
void StackPush(Stack* ps, SDataType data);
//出栈
void StackPop(Stack* ps);
//获取栈顶元素
SDataType StackTop(Stack* ps);
//有效元素个数
int StackSize(Stack* ps);
//判断是否为空
int StackEmpty(Stack* ps);
//销毁栈
void StackDestroy(Stack* ps);

具体功能的实现代码如下:

#include"Stack.h"
#include<stdio.h>
#include<assert.h>
#include<malloc.h>

//栈的初始化
void StackInit(Stack* ps) {
	assert(ps);
	ps->_array = (SDataType*)malloc(sizeof(SDataType));
	if (ps->_array == 0) {
		printf("申请失败");
		return;
	}
	ps->_capacity = 0;
	ps->_size = 0;
}

//入栈
void StackPush(Stack* ps, SDataType data) {
	assert(ps);
	if (ps->_size >= ps->_capacity) {
		ps->_array = (SDataType*)realloc(ps->_array, sizeof(SDataType)*(ps->_capacity * 2));
		assert(ps->_array);
		ps->_capacity *= 2;
	}
	ps->_array[ps->_size++] = data;
}

//出栈
void StackPop(Stack* ps) {
	assert(ps);
	if (ps->_size < 0) {
		return;
	}
	ps->_size--;
}

//获取栈顶元素
SDataType StackTop(Stack* ps) {
	assert(ps);
	if (ps->_size <= 0)
		return;
	return ps->_array[ps->_size - 1];
}

//有效元素的个数
int StackSize(Stack* ps) {
	assert(ps);
	return ps->_size;
}

//	检测栈是否为空
int StackEmpty(Stack* ps){
	assert(ps);
	return 0 ? 0 : 1;
}

//销毁栈
void StackDestroy(Stack* ps) {
	assert(ps);
	free(ps->_array);
	ps->_array = NULL;
	ps->_capacity = 0;	
	ps->_size = 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值