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

可拖拽网站三星官网商城

可拖拽网站,三星官网商城,公众号开发者密码是什么,商务网站建设公司哪家好汇总代码见:登录 - Gitee.com 上一篇文章:数据结构:双向链表-CSDN博客 与本文相关的结构体传参:自定义类型:结构体-CSDN博客 1.栈 1.1概念和结构 栈:一种特殊的线性表,其只允许在固定的一端…

汇总代码见:登录 - Gitee.com

上一篇文章:数据结构:双向链表-CSDN博客

与本文相关的结构体传参:自定义类型:结构体-CSDN博客

1.栈

1.1概念和结构

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

栈底层结构选型:

栈的实现一般可以使用数组或者链表实现,相对而言,数组的结构实现更优一些。

原因:在入栈和出栈的时间复杂度均为O(1)的前提条件下,数组的内存利用率远高于链表,尤其是在存储小数据类型时。

1.2栈的实现

依旧建立三个文件:

1.2.1定义栈的结构


//定义栈的结构
typedef int STDataType;
typedef struct Stack {STDataType* arr;int top;//指向当前栈顶元素的索引--正好为栈中有效的数据个数int capacity;//栈的空间大小
}ST;

1.2.2初始化

//初始化
void STInit(ST* ps)
{ps->arr = NULL;ps->capacity = ps->size = 0;
}

调用调试:

1.2.3销毁

//销毁
void STDesTroy(ST* ps)
{if (ps->arr)free(ps->arr);ps->arr = NULL;ps->size = ps->capacity = 0;
}

1.2.4入栈

// ⼊栈
void STPush(ST* ps, STDataType x)
{assert(ps);//判断空间是否足够if (ps->top == ps->capacity){//增容int newCapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity;STDataType* tmp = (STDataType*)realloc(ps->arr, newCapacity * sizeof(STDataType));if (tmp == NULL){perror("realloc fail!");exit(1);}ps->arr = tmp;ps->capacity = newCapacity;}//空间足够ps->arr[ps->top++] = x;
}

调用测试:

STPush(&st, 1);
STPush(&st, 2);
STPush(&st, 3);
STPush(&st, 4);
STPush(&st, 5);

1.2.5判空

//栈是否为空
bool STEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}

1.2.6出栈

//出栈
void STPop(ST* ps)
{assert(!STEmpty(ps));ps->top--;
}

调用测试:

1.2.7取栈顶元素

top为指向当前栈顶元素的索引,所以需要-1。

//取栈顶元素
STDataType STTop(ST* ps)
{assert(!STEmpty(ps));return ps->arr[ps->top - 1];
}

调用测试:

while (!STEmpty(&st))
{//取栈顶STDataType top = STTop(&st);printf("%d ", top);//出栈STPop(&st);
}
printf("\n");

1.2.8获取栈中有效元素个数

//获取栈中有效元素个数
int STSize(ST* ps)
{assert(ps);return ps->top;
}

调用测试:

printf("size:%d\n",STSize(&st));

1.3解释assert(ps)与assert(!STEmpty)

assert(ps):保证传入的为有效的栈结构体变量。限制参数不能为空。

assert(!STEmpty):保证栈中的有效个数不能为空。

2.力扣算法题:有效的括号

20. 有效的括号 - 力扣(LeetCode)

理解题意:

思路:借助栈,遍历字符串,如果遇到左括号,就将字符串入栈,如果遇到右括号,就取栈顶,将其与右括号相比较,相同则出栈。

编程中遇到的问题:有空字符串或者遇到一开始就是右括号的,需要判断栈是否为空以及对于条件表达式的使用错误。

代码如下:

// 需要借助栈
// 定义栈的结构
typedef char STDataType;
typedef struct Stack {STDataType* arr;int top;      // 指向当前栈顶元素的索引--正好为栈中有效的数据个数int capacity; // 栈的空间大小
} ST;
// 初始化
void STInit(ST* ps) {ps->arr = NULL;ps->capacity = ps->top = 0;
}// 销毁
void STDesTroy(ST* ps) {if (ps->arr)free(ps->arr);ps->arr = NULL;ps->top = ps->capacity = 0;
}// ⼊栈
void STPush(ST* ps, STDataType x) {assert(ps);// 判断空间是否足够if (ps->top == ps->capacity) {// 增容int newCapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity;STDataType* tmp =(STDataType*)realloc(ps->arr, newCapacity * sizeof(STDataType));if (tmp == NULL) {perror("realloc fail!");exit(1);}ps->arr = tmp;ps->capacity = newCapacity;}// 空间足够ps->arr[ps->top++] = x;
}// 栈是否为空
bool STEmpty(ST* ps) {assert(ps);return ps->top == 0;
}// 出栈
void STPop(ST* ps) {assert(!STEmpty(ps));ps->top--;
}// 取栈顶元素
STDataType STTop(ST* ps) {assert(!STEmpty(ps));return ps->arr[ps->top - 1];
}// 获取栈中有效元素个数
int STSize(ST* ps) {assert(ps);return ps->top;
}
// 以上为栈结构的定义与常见方法
bool isValid(char* s) {ST st;STInit(&st);char* i = s;while (*i != '\0') {// 左括号入栈if (*i == '(' || *i == '[' || *i == '{') {STPush(&st, *i);} else {// 右括号取栈顶,出栈或返回false// 若第一个为右括号,为空栈if (STEmpty(&st)) {STDesTroy(&st);return false;}char top = STTop(&st);if((top == '[' && *i != ']') || (top == '{' && *i != '}')|| (top == '(' && *i != ')')){STDesTroy(&st);return false;} //匹配-出栈STPop(&st);}i++;}// 栈是否为空//  if(STEmpty(&st))//  {//      STDesTroy(&st);//      return true;//  }// STDesTroy(&st);// return false;bool ret = STEmpty(&st) ? true : false;STDesTroy(&st);return ret;
}

最终通过测试。

本章完。

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

相关文章:

  • MySQL 8.x 的 my.ini配置设置
  • 周志华《机器学习导论》第 15 章 规则学习(符号主义学习)
  • 使用pycharm自带debug模式运行flask时报错
  • 福州做网站需要多少钱懒设计app
  • Dify 安全架构设计
  • 网站推广国外网站建设素材库
  • Rust 练习册 :Pythagorean Triplet与数学算法
  • 构建一个短链接生成器服务(FastAPI + SQLite)
  • 基于SpringBoot智慧社区系统/乡村振兴系统/大数据与人工智能平台
  • 做网站的公司跑了wordpress 首页显示产品
  • BLDCPMSM电机控制器硬件设计工程(八)72V 10kW电机控制器原理图工程及库文件
  • 西宁的网站建设公司怎样建立网站的快捷方式
  • MATLAB基于IOWGA算子的最优组合预测模型及应用
  • HarmonyOS Web组件深度解析:构建高性能JavaScript交互的实践与创新
  • 华为OD机试双机位A卷 - 竖直四子棋 (JAVA Python C++ JS GO)
  • Qt C++:跨平台开发利器
  • 愿景 做中国最受欢迎的互联网网站阿里云建站论坛网站
  • HotpotQA:推动多跳推理问答发展的标杆数据集
  • 【开题答辩全过程】以 二手家电回收平台的设计与实现为例,包含答辩的问题和答案
  • 图论基础概念
  • Doris支持的数据导入方式
  • 【SpringCloud(10)】Alibaba旗下微服务开发:Nacos注册中心和配置中心使用、安装Nacos、Nacos部署、集群部署
  • Font Awesome 文件类型图标
  • 细说 ASP.NET控制HTTP缓存
  • 高新区网站建设 意义搜索大全搜索引擎
  • S32K146 -CAN(FlexCAN)收发-经验教训
  • MCU学习Day24——STM32G030多路ADC DMA采集深度解析:完全可配置序列器与不完全可配置序列器的陷阱与抉择
  • dedecms 网站栏目管理寺庙网站素材
  • 东莞网站建设seo优化办公室现代简约装修效果图
  • 服务间通信模式