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

怎么看一个网站什么程序做的国外网站建设素材库

怎么看一个网站什么程序做的,国外网站建设素材库,公司网站没有备案是不是违法的,h5页面制作软件官网栈和队列 1.栈1.1定义:1.2基本操作:1.3代码实现1.3.1栈的初始化1.3.2栈的销毁1.3.3入栈1.3.4出栈1.3.5返回栈顶元素以及栈元素个数1.3.6判断栈是否为空 1.栈 1.1定义: 栈是一种线性数据结构,它按照 “先进后出”(Fir…

栈和队列

  • 1.栈
    • 1.1定义:
    • 1.2基本操作:
    • 1.3代码实现
      • 1.3.1栈的初始化
      • 1.3.2栈的销毁
      • 1.3.3入栈
      • 1.3.4出栈
      • 1.3.5返回栈顶元素以及栈元素个数
      • 1.3.6判断栈是否为空

1.栈

1.1定义:

栈是一种线性数据结构,它按照 “先进后出”(First In Last Out,FILO)的原则存储和操作数据。这意味着最后插入栈中的元素会最先被取出,就像一摞盘子,最后放上去的盘子会最先被拿走。

1.2基本操作:

  1. 入栈(Push):将一个元素添加到栈的顶部。例如,有一个空栈,现在要入栈元素 5,那么 5 就会成为栈顶元素;若再入栈元素 8,8 就会位于栈顶,5 在 8 的下面。
  2. 出栈(Pop):从栈的顶部移除并返回一个元素。接着上面的例子,执行出栈操作时,元素 8 会被移除并返回,此时栈顶元素变为 5。
  3. 获取栈顶元素(Top):返回栈顶的元素,但并不移除它。
  4. 判断栈是否为空(IsEmpty):检查栈中是否没有任何元素。如果栈为空,执行出栈或获取栈顶元素操作可能会导致错误,所以在进行这些操作之前通常会先判断栈是否为空。
  5. 获取栈的元素个数(StackSize)。

1.3代码实现

1.3.1栈的初始化

栈结构定义:
◦ 使用动态数组存储栈的数据。
◦ 包含三个主要属性:
a:动态分配的数组,用于存储栈中的数据。
capacity:栈的当前容量(即分配的内存大小)。
top:栈顶指针,指向下一个可以插入的位置(同时也是栈中元素的数量)。
2. 初始化操作(StackInit):
◦ 动态分配初始内存空间(大小为4个数据类型单位)。
◦ 设置栈的初始容量为4。
◦ 将栈顶指针初始化为0,表示栈为空。
◦ 如果内存分配失败,打印错误信息并退出程序。
3. 核心逻辑:
◦ 使用 malloc 动态分配内存,确保栈的大小可以根据需要扩展。
◦ 使用 assert 确保传入的栈指针有效,避免对空指针操作。
◦ 提供了栈的基本操作框架,为后续实现(如入栈、出栈)奠定了基础。

void StackInit(ST* ps)
{assert(ps);ps->a = (STDataType*)malloc(sizeof(STDataType) * 4);if (ps->a == NULL){printf("malloc fail\n");exit(-1);}ps->capacity = 4;ps->top = 0;
}

1.3.2栈的销毁

  1. 检查栈指针的有效性:
    使用 assert(ps) 确保传入的栈指针 ps 不为 NULL,避免对空指针进行操作。
  2. 释放动态分配的内存:
    使用 free(ps->a) 释放栈的数据存储区(ps->a)所占用的动态内存。
    将 ps->a 设置为 NULL,避免悬挂指针(dangling pointer)问题。
  3. 重置栈的属性:
    将栈的容量(ps->capacity)和栈顶指针(ps->top)重置为0,确保栈处于安全的初始状态。
void StackDestory(ST* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->top = ps->capacity = 0;
}

1.3.3入栈

  1. 检查栈指针的有效性:
    ◦ 使用 assert(ps) 确保传入的栈指针 ps 不为 NULL。
  2. 检查栈是否已满:
    ◦ 如果栈顶指针 ps->top 等于栈的容量 ps->capacity,表示栈已满,需要扩容。
  3. 动态扩容:
    ◦ 使用 realloc 将栈的容量加倍(ps->capacity * 2)。
    ◦ 如果 realloc 失败(返回 NULL),打印错误信息并退出程序。
    ◦ 如果扩容成功,更新栈的数据指针 ps->a 和容量 ps->capacity。
  4. 入栈操作:
    ◦ 将新元素 x 放入栈顶位置(ps->a[ps->top])。
    ◦ 将栈顶指针 ps->top 加1,指向下一个可插入的位置。
// 入栈
void StackPush(ST* ps, STDataType x)
{assert(ps);// 满了-》增容if (ps->top == ps->capacity){STDataType* tmp = (STDataType*)realloc(ps->a, ps->capacity * 2 * sizeof(STDataType));if (tmp == NULL){printf("realloc fail\n");exit(-1);}else{ps->a = tmp;ps->capacity *= 2;}}ps->a[ps->top] = x;ps->top++;
}

1.3.4出栈

  1. 检查栈指针的有效性:
    ◦ 使用 assert(ps) 确保传入的栈指针 ps 不为 NULL。
  2. 检查栈是否为空:
    ◦ 使用 assert(ps->top > 0) 确保栈中至少有一个元素。
    ◦ 如果栈为空(ps->top == 0),断言失败,程序终止并报错。
  3. 弹出操作:
    ◦ 将栈顶指针 ps->top 减1,表示移除栈顶元素。
    ◦ 注意:此操作不会显式释放栈顶元素的内存(因为栈的内存是连续分配的),只是减少了栈顶指针的值。
void StackPop(ST* ps)
{assert(ps);//考虑栈为空的情况;assert(ps->top > 0);ps->top--;
}

1.3.5返回栈顶元素以及栈元素个数

  1. 检查栈指针的有效性:通过 assert(ps) 确保传入的栈指针 ps 不为 NULL。
  2. 检查栈是否为空:通过 assert(ps->top > 0) 确保栈中至少有一个元素。
  3. 返回栈顶元素:返回栈顶元素(ps->a[ps->top - 1]),即当前栈顶指针所指向的元素。
STDataType StackTop(ST* ps)
{assert(ps);assert(ps->top > 0);return ps->a[ps->top - 1];
}
int StackSize(ST* ps)
{assert(ps);return ps->top;
}

1.3.6判断栈是否为空

  1. 检查栈指针的有效性:通过 assert(ps) 确保传入的栈指针 ps 不为 NULL。
  2. 判断栈顶是否为空
    ◦ 检查栈顶指针 ps->top 是否为0。
    ◦ 如果 ps->top == 0,表示栈为空,返回 true。
    ◦ 否则,返回 false。
bool StackEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}
http://www.dtcms.com/a/536802.html

相关文章:

  • MongoDB的$sample是啥?
  • __金仓数据库平替MongoDB实战:从多模兼容到高可用落地__
  • 缓存相关,redis
  • 零基础如何准备蓝桥杯
  • 佛山 网站设计公司中山高端网站建设
  • 2.2.1.10 大数据方法论与实践指南-Kafka 使用规范
  • 培训班在哪个网站找网站建设注意事情
  • 企业的网站建设公司南阳做网站 汉狮公司
  • 数据驱动下的金融AI实践:技术落地路径、方法论沉淀与场景价值挖掘
  • 百日挑战-单词篇(第五天)
  • 做网站的开发软件seo优化的优点
  • 1空间做2个网站2017网站设计趋势
  • <项目代码>yolo螺丝螺母识别<目标检测>
  • 企业级SQL审核工具PawSQL介绍(2)- 审核规则体系
  • FastGestures v2.2.51 鼠标、触控板、屏手势软件
  • Maven(项目管理工具)
  • 湛江市建设规划局网站dede静态网站
  • 在SCNet超算DCU异构AI手工安装Ollama 0.6.7版本
  • CSP-S模拟赛八总结
  • 电子商务网站设计流程vuejs做视频网站
  • 新手做网站需要哪些软件thinkphp旅游网站源码
  • 漳州市城乡建设局网站6wordpress自定义排版
  • Falco:云原生世界中的安全守护者
  • 塘沽做网站的公司电子商城市场
  • 一篇文章详解Kafka Broker
  • Vue3 创建项目
  • 怎样注册自己网站公司企业网站制作需要多少钱
  • 京东网站建设吗做宣传的网站
  • 单细胞空间--纤维相关蛋白阳性成纤维细胞调控伴瘤栓肾细胞癌的肿瘤微环境重构
  • Visual Studio 2022打包生成exe安装程序