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

学习嵌入式第二十三天——数据结构——栈

栈 

可以看成做了限制的线性表,只能在一端,增加,删除操作。元素 先进后出。 
栈顶,允许增加,删除的一端,栈顶 
栈底  ,不允许允许增加,删除的一端,
作用: 递归,回溯, 优先级,符号匹配。

入栈(增加),出栈(删除),获得栈顶元素(gettop)。

栈的操作:

#include "LinkStack.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
LinkStack* CreateLinkStack()
{LinkStack* ls = malloc(sizeof(LinkStack));if (NULL == ls){perror("CreateLinkStack malloc error\n");return NULL;}ls->top = NULL;ls->clen = 0;return ls;
}
/*** @brief 入栈,增加元素 底层实现 链表的头插** @param ls 待操作的链栈* @param data 需要入栈的元素* @return int 0 成功 非0 表示失败*/
int PushLinkStack(LinkStack* ls, DATATYPE* data)
{LinkStackNode* newnode = malloc(sizeof(LinkStackNode));if (NULL == newnode){perror("PushLinkStack malloc error\n");return 1;}memcpy(&newnode->data, data, sizeof(DATATYPE));newnode->next = NULL;newnode->next = ls->top;ls->top = newnode;ls->clen++;return 0;
}
/*** @brief 出栈 ,删除元素 ,链表的头删** @param ls 待操作的链栈* @return int 0 成功 非0 表示失败*/
int PopLinkStack(LinkStack* ls)
{if (IsEmptyLinkStack(ls)){printf("linkstack is empty\n");return 1;}LinkStackNode* tmp = ls->top;ls->top = ls->top->next;free(tmp);ls->clen--;return 0;
}
/*** @brief 获得栈顶元素** @param ls 待操作的链栈* @return DATATYPE*  NULL 失败*/
DATATYPE* GetTopLinkStack(LinkStack* ls)
{if (IsEmptyLinkStack(ls)){return NULL;}return &ls->top->data;
}
int IsEmptyLinkStack(LinkStack* ls)
{return 0 == ls->clen;
}
int GetSizeLinkStack(LinkStack* ls)
{return ls->clen;
}
int DestroyLinkStack(LinkStack* ls)
{while (!IsEmptyLinkStack(ls)){PopLinkStack(ls);  // clen --  free;}free(ls);return 0;
}

http://www.dtcms.com/a/343790.html

相关文章:

  • Qt5 文件与数据处理详解
  • NETSDK1045 当前 .NET SDK 不支持将 .NET 8.0 设置为目标。请将 .NET 5.0 或更低版本设置为目标,或使用支持
  • 【FPGA Interlaken协议】
  • 服务器与客户端
  • AI服务器介绍
  • FPGA设计中的信号完整性量化与优化:探索高速数字系统的关键路径
  • 20.9 QLoRA微调实战:1.5B参数Whisper-large-v2在24GB显存实现中文语音识别,CER骤降50%!
  • 企业微信新版搞了个AI功能
  • 构效关系(Structure-Activity Relationship, SAR)分析的标准方法:R基团结构解析
  • Amazon Lambda:无服务器时代的计算革命,解锁多样化应用场景
  • MATLAB入门教程
  • 【PSINS工具箱】MATLAB例程,二维平面上的组合导航,EKF融合速度、位置和IMU数据,4维观测量
  • 如何创建一个Cloudfalare worker项目?
  • 当下一次攻击发生前:微隔离如何守护高敏数据,防范勒索攻击下的数据泄露风险!
  • 【变压器老化仿真】matlab实现变压器老化过程的行为模拟与源码编写
  • 24.解构赋值
  • Qt5 的跨平台开发详细讲解
  • 嘉立创eda元件导出到kicad库以使用
  • Spring Ai 1.0.1中存在的问题:使用MessageChatMemoryAdvisor导致System未被正确的放在首位
  • 拆解本地组策略编辑器 (gpedit.msc) 的界面和功能
  • 相似度、距离
  • 【C++】--函数参数传递:传值与传引用的深度解析
  • C++ csignal库详细使用介绍
  • CXR-LT 2024:一场关于基于胸部X线的长尾、多标签和零样本疾病分类的MICCAI挑战赛|文献速递-深度学习人工智能医疗图像
  • 25年8月通信基础知识补充1:中断概率与遍历容量、Sionna通信系统开源库、各种时延区分
  • 针对pycharm缩进空格报错--解决方法
  • Linux下的网络编程
  • 实用R语言机器学习指南:从数据预处理到模型实战(附配套学习资源)
  • 如何低门槛自制Zigbee 3.0温湿度计?涂鸦上新开发包,开箱即用、完全开源
  • 【软考架构】第6章 数据库基本概念