看这个代码前,建议先看完小甲鱼栈数据结构那节课 栈数据结构讲解

我是第一次学数据结构这个课,这个数据结构课,对C语言水平要求还是有点高的,最基本的就是得熟悉指针,像结构体指针,还有C语言的数据类型了,基础的int char float,复杂点的 struct结构体,还有数据类型定义typedef,和宏定义,还有函数定义和调用,函数参数,形参,实参…,好在我之前有接近两年的嵌入式C语言编程经验,现在大三上初,之前学了51MCU,STM32MCU,基于这俩MCU做了些小项目,后边发现任务一但多了,在while(1){} 大循环里调整起来就很费劲了,就得上多任务操作系统了,然后这个暑假就学了学FreeRTOS,发现这个RTOS内核源代码的C语言,虽然也是C写的,但是我基本看不懂,STM32标准库是C写的那个还能看懂呢,可能是因为我只学了双向链表这个简单的数据结构,还差些其他数据结构的知识,我不是CS专业的,CS专业的内容只学了C语言,还有个单片机原理,没学过数据结构,所以看那个RTOS内核源代码直接给我整蒙了,然后了解过后OS,才意识到不学数据结构真不行了,不然真看着是C的数据类型和C语句,struct,int(i)(chars,int a),typedef,#define…但就是不知道这一段代码的含义

/*** @file statck.c* @author WLS* @brief 栈结构的实现 和入栈,出栈,清栈操作* @version 0.1* @date 2022-10-08* * @copyright Copyright (c) 2022* */
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>#define Statck_Init_SIZE    3 //开始时候的栈空间大小 3个 栈单元 空间 =3 Byte#define Statck_Add_SIZE     2 //要追加的栈空件大小 2个栈单元大小=2 Byte/*** @brief 栈的结构,(一个虚拟的存储容器)* 一个栈 基础单元内存大小为 sizeof(char)= 1 Byte*/
typedef struct
{char *Top;  //栈顶指针char *Base;  //栈底指针int Statck_Size;//栈的存储容量  基础单元内存大小:4 Byte}Statck_Type;//-------------------函数声明区域----------------------void Init_Stack(Statck_Type *s0);  //初始化栈void Push(Statck_Type *s,char ele); //入栈操作 void POP(Statck_Type *s,char ele); //出栈操作void Pruge_Stack(Statck_Type *s); //清空一个栈int detce_Stack_Size(Statck_Type *s); //检测栈空间大小//-------------------函数声明区域----------------------/*** @brief 主函数* * @return int 返回值*/
int main(void)
{return 0;
}//-------------------函数定义区域----------------------/*** @brief 初始化栈,栈基础单元大小为,1Byte* * @param s0 栈成员地址*/
void Init_Stack(Statck_Type *s0)
{/*** @brief 申请 Statck_Init_SIZE个栈单元的内存空间 *将申请到的内存空间的 起始地址赋值给栈底* */s0->Base=(char *)malloc( Statck_Init_SIZE * sizeof(char) );if(s0->Base==NULL) return ; //如果申请失败 退出初始化函数s0->Top=s0->Base; //一开始时候 栈内单元未存储任何东西 所以栈顶指针和栈底指针相等s0->Statck_Size=Statck_Init_SIZE; //栈容量大小 等于用户定义的大小}/*** @brief 把数据 入栈 ,入栈之后  (栈顶地址)TOP+1* * @param s 要放入栈 的地址* @param ele 要入栈的数据*/
void Push(Statck_Type *s,char ele)
{//如果栈满了 栈顶地址 -栈顶地址大于等于栈内空间大小if( (s->Top-s->Base )>=s->Statck_Size ){//重新分配内存空间 在原来的基础上增加 Statck_Add_SIZE 2个栈单元大小 空间 2 * 4Bytes->Base=(char *)realloc(s->Base, sizeof(char)*(Statck_Init_SIZE+Statck_Add_SIZE) );if(s->Base==NULL) return;//申请空间失败 退出函数s->Top=s->Base+s->Statck_Size;//栈顶地址 还是等于上一次 结束时候的栈顶地址s->Statck_Size=s->Statck_Size+Statck_Add_SIZE;//新的栈空间大小为 原来的大小 加上新增加的大小}*s->Top=ele;//将数据放入栈顶中s->Top++;//栈顶地址+1}/*** @brief 将栈内单元中的数据 弹出来,出栈前 TOP先-1 再弹出栈地址内的数据* * @param s 栈的地址* @param ele 将栈单元内 存储的数据放入到栈单元类型的变量中去*/
void POP(Statck_Type *s,char ele)
{if(s->Base ==NULL) return;//如果栈内数据都被 完全弹出了 栈顶地址减到底了  则取消弹栈ele=*(--(s->Top));//栈顶地址先-1  再将栈内的数据 取出送入 ele变量中}/*** @brief 清空一个栈* * @param s 栈结构成员的地址*/
void Pruge_Stack(Statck_Type *s)
{if( s->Base != NULL ){free(s->Base);//释放栈的内存空间 s->Base=NULL ;//栈底地址清零} }/*** @brief 检测栈的大小* * @param s 栈结构成员的地址* @return int 栈的空间大小 单位:Byte*/
int detce_Stack_Size(Statck_Type *s)
{if( s->Base != NULL )   return s->Statck_Size; //返回栈的大小
}//-------------------函数定义区域----------------------

自学B站小甲鱼数据结构课程-C语言实现基础数据结构-栈-的例子相关推荐

  1. C++学习记录(B站小甲鱼C++快速入门视频)

    文章目录 C++特点: 封装 抽象 继承 多态 从一个小程序开始 第二个小程序(IO) cin跟cout对象的多个方法 第三个小程序(File) 多种文件操作用or操作符`"|"` ...

  2. B站小甲鱼零基础python视频P57爬取煎蛋网OOXX妹纸图代码修改

    问题描述 在B站看[小甲鱼]零基础入门学习PythonP57集时遇到了一些问题,现在煎蛋网的的图片每一页的网址和视频里的不太一样,看弹幕有的说能爬,有的说不能爬,也没有标明日期,当时挺懵逼的,不知道该 ...

  3. B站小甲鱼python学习笔记

    000 愉快的开始 视频地址: https://www.bilibili.com/video/BV1xs411Q799?p=1 python跨平台 应用范围: 操作系统.WEB.3D动画.企业应用.云 ...

  4. 小甲鱼python课件源代码_[Python基础] 小甲鱼零基础入门Python学习视频+全套源码课件 Python视频教程 96讲...

    资源介绍 课程简介: 小甲鱼的Python课程,对初学者来说相当不错!97讲完全解读,会让大家对Python的认识从无到有,推荐给大家! 课程目录------------------- 第000讲 愉 ...

  5. c语言visit_数据结构(c语言)——入门数据结构的世界:顺序线性表(一)

    前面说的话 提到数据结构,最出名的恐怕还是四大基本结构,分别是集合,线性结构,树形结构和图形结构. 本人只是一名普普通通的本科学生,学的东西比较基础,甚至有可能比较落伍,但作为所有国内高等学府相关专业 ...

  6. 小甲鱼Python课程18课课后题

    编写一个符合以下要求的函数:       a) 计算打印所有参数的和乘以基数(base=3)的结果     b) 如果参数中最后一个参数为(base=5),则设定基数为5,基数不参与求和计算. # - ...

  7. python小甲鱼爬虫妹子_【Python学习日记】B站小甲鱼:爬虫

    Web Spider Python 如何访问互联网 URL + lib -->urllib URL的一般格式为 protocol://hostname[:port] / /path /[;par ...

  8. 小甲鱼python课程学习_部分

    再来看多一个例子 #append_test_2 aList = [123, 'xyz', 'zara', 'abc'] bList = ['edf'] aList.append(bList) prin ...

  9. python 入门实战改进B站小甲鱼飞机大战增强版4.0

    效果: 资源包下载地址:https://download.csdn.net/download/m0_50944918/13977863 部分代码观礼: import pygame import sys ...

最新文章

  1. iOS 修改网络图片的大小 宽和高
  2. Javascript 常用功能收集-blogjava
  3. 字符串处理:布鲁特--福斯算法
  4. 《Effective C#》读书笔记-1.C# 语言习惯-2.使用运行时常量(readonly)而不是编译时常量(const)...
  5. mysql人事管理系统源代码_人事管理系统(源代码.doc
  6. Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
  7. android 仿美团悬浮,类似美团悬浮框的效果
  8. OpenResty Codis集群缓存系统
  9. 计算机网络第四章思维导图_初级会计实务的第四章所有者权益的思维导图丨初级讲堂...
  10. Git和Github代码管理实践
  11. 多功能智慧(灯杆)路灯项目建设背景及现实的意义主要体现在哪几个方面?
  12. maven--解决was cached in the local repository, resolution will not be reattempted until the update
  13. 服装ERP系统的优势与缺点
  14. 因电子邮件礼节不佳而被解雇
  15. 89canvas制作时钟
  16. 对IOC和DI的通俗理解
  17. HTML页面、CSS样式的以及js学习与介绍
  18. DIY TCP/IP IP模块和ICMP模块的实现1
  19. win10 进不了修复服务器失败,win10系统电脑启动不了的修复方法
  20. 误GHOST、误一键恢复灾难应急方案

热门文章

  1. 迁移学习论文(三):Multi-Adversarial Domain Adaptation论文原理及复现工作
  2. 心血来潮拆华硕X54H笔记本(打算升级)
  3. 读picamera 文档总结(一)
  4. 特斯拉前高管:马斯克发推特之前 很多员工就已知晓私有化计划
  5. CS5265方案应用|TYPEC投屏方案| Type-C转HDMI4K60HZ转换方案
  6. 毕设论文写作技巧 2021-10-9
  7. cocos2d-xnbsp;图片纹理优…
  8. 咕咕机显示服务器请求异常,咕咕机 云服务器异常
  9. matlab中ct值直方图,【CT值与灰度值的总结】
  10. 苹果6s出现连接不上服务器未响应,苹果6s的蜂窝移动数据打开没反应怎么办