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