当前位置: 首页 > news >正文

数据结构——栈(C语言)

需求:无

栈的概念:

  • 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端为栈底。栈中的数据元素遵守后进先出(LIFO)原则。
  • 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。
  • 出栈:栈的删除操作叫做出栈。出数据也在栈顶。

 

 栈的图示:

  • 栈的实现一般可以使用数组和链表实现,相对而言数组结构实现更优一些。因为尾插时代价小很多。(不用遍历)

 

栈的判空:

栈的判空有二种实现方式,一种是top赋为0,一种是top赋为-1。区别:是top为0的时候,是先赋值再++,top为-1的时候相反。

 

 栈的应用场景:

  • 函数的调用:操作系统会给每一个线程分配一个独立的内存空间,每一个内存空间其实就是一个栈结构,它会将临时标量,参数等等放到栈中,当栈执行完的时候,就会将最近的一个栈帧出栈。
  • 括号匹配,判断括号是否匹配,例如([]),[({})]

下面是源码:

void StackInit(Stack* ps)
{assert(ps);ps->a = NULL;ps->capacity = ps->top = 0;
}void StackPush(Stack* ps, STDateType x)
{assert(ps);if (ps->top == ps->capacity){int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;STDateType* tmp = (STDateType*)realloc(ps->a, sizeof(STDateType) * newcapacity);if (tmp == NULL){perror("realloc fail");exit(-1);}ps->a = tmp;ps->capacity = newcapacity;}ps->a[ps->top] = x;++ps->top;
}void StackPop(Stack* ps)
{assert(ps);assert(ps->top > 0);--ps->top;
}STDateType StackTop(Stack* ps)
{assert(ps);assert(ps->top > 0);return ps->a[ps->top - 1];
}int StackSize(Stack* ps)
{assert(ps);return ps->top;
}bool StackEmpty(Stack* ps)
{assert(ps);return (ps->top == 0);
}void StackDestroy(Stack* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->top = ps->capacity = 0;
}

http://www.lryc.cn/news/127165.html

相关文章:

  • Linux 内核内存管理 page_address 函数
  • macOS使用ffmpeg与QT进行音视频推拉流
  • ARTS打卡:双指针的尝试
  • JavaWeb-DAO设计模式
  • 重温git和GitHub
  • C# WPF 中 外部图标引入iconfont,无法正常显示问题 【小白记录】
  • Hi-TRS:骨架点视频序列的层级式建模及层级式自监督学习
  • FPGA 之 xilinx DDS IP相位控制字及频率控制字浅析
  • [鹏城杯 2022]简单包含
  • Required request parameter ‘XXX‘ for method parameter type XXX is not present问题
  • centOS 快速安装和配置 NVIDIA docker Container Toolkit
  • 编程练习(2)
  • 利用Figlet工具创建酷炫Linux Centos8服务器-登录欢迎界面-SHELL自动化编译安装代码
  • Git Cherry-pick使用
  • 红帽8.5 ansible 安装和部署 |(简单版)
  • Visual Studio 2019 c++ 自定义注释 ----doxygen
  • 面试题. 零矩阵
  • 易语言下载器
  • 原生js获取今天、昨天、近7天的时间(年月日时分秒)
  • 最强自动化测试框架Playwright(29)-文件选择对象
  • 【烂尾】K8S部署
  • 电机故障诊断(python程序,模型为MSCNN结合LSTM结合注意力机制模型,有注释)
  • 二叉树(ACM版)
  • Scratch 之 如何制作鼠标框(2)—— 鼠标框框定角色
  • 爬虫逆向实战(九)--猿人学第十三题
  • NeuralNLP-NeuralClassifier的使用记录(一),训练预测自己的【英文文本多分类】
  • Pycharm社区版连接WSL2中的Mysql8.*
  • 前端传递参数时,form-data 和 json 的区别
  • FairyGUI-Unity侧菜单扩展
  • 学习笔记十八:污点、容忍度