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

刺骨的言语ヽ痛彻心扉 2022-10-30 14:30 229阅读 0赞

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

栈的基本结构

  1. typedef int STDataType;
  2. typedef struct stack{
  3. STDataType* _data; //存放数据
  4. int _size; //存放数量
  5. int _capacity; //最大容量
  6. }stack;

接口声明

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

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

接口实现

1.初始化
  1. void stackInit(stack* st){
  2. if (st == NULL) //判空
  3. return;
  4. st->_data = NULL; //将空间变为空
  5. st->_size = st->_capacity = 0; //大小变为0
  6. }
2.检查容量
  1. void checkCapacity(stack* st){
  2. if (st->_size == st->_capacity){ //在存储的元素和最大内存量相等的时候就要开辟空间
  3. //判断是开辟一个还是直接扩大一倍
  4. int newCapacity = st->_capacity == 0 ? 1 : 2 * st->_capacity;
  5. //直接用realloc直接初始化为0
  6. st->_data = (STDataType*)realloc(st->_data, sizeof(STDataType)*newCapacity);
  7. //将原来的指向为新开辟的空间
  8. st->_capacity = newCapacity;
  9. }
  10. }
3.入栈
  1. void stackPush(stack* st, STDataType val){
  2. if (st == NULL) //判空
  3. return;
  4. checkCapacity(st); //检查
  5. st->_data[st->_size++] = val; //size++直接赋值就可以,简单
  6. }
4.出栈
  1. void stackPop(stack* st){
  2. if (st == NULL) //判空
  3. return;
  4. if (st->_size > 0){
  5. st->_size--; //直接让size-1就可以删掉顶部的一个元素
  6. }
  7. }
5.获取栈顶元素
  1. STDataType stackTop(stack* st){
  2. return st->_data[st->_size - 1]; //直接输出size-1在data里面对应的数据即可
  3. }
6.判空
  1. int stackEmpty(stack* st){
  2. if (st == NULL || st->_size == 0)
  3. return 1; //为空返回1
  4. else
  5. return 0;
  6. }
7.栈大小
  1. int stackSize(stack* st){
  2. if (st == NULL)
  3. return 0;
  4. //判空没问题直接输出size即可
  5. return st->_size;
  6. }

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

发表评论

表情:
评论列表 (有 0 条评论,229人围观)

还没有评论,来说两句吧...

相关阅读