动态栈
实现基于动态栈的以下操作:
- 栈的初始化
- 入栈
- 出栈
- 获取栈顶元素
- 有效元素个数
- 判断是否为空
- 销毁栈
代码如下:
引入头文件,定义动态栈
#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;
}