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

官方网站建设有限公司网络推广需要多少钱

官方网站建设有限公司,网络推广需要多少钱,公网带宽1m能建设电商网站吗,wordpress 改变url文章目录 引言1.栈的基本概念2.选择数组还是链表?3. 定义栈结构4.初始化栈5.压栈操作6.弹栈操作7.查看栈顶和判断栈空9.销毁栈操作10.测试并且打印栈内容栈的实际应用结论 引言 栈是一种基本但强大的数据结构,它在许多算法和系统功能中扮演着关键角色。…

文章目录

  • 引言
  • 1.栈的基本概念
  • 2.选择数组还是链表?
  • 3. 定义栈结构
  • 4.初始化栈
  • 5.压栈操作
  • 6.弹栈操作
  • 7.查看栈顶和判断栈空
  • 9.销毁栈操作
  • 10.测试并且打印栈内容
  • 栈的实际应用
  • 结论

引言

栈是一种基本但强大的数据结构,它在许多算法和系统功能中扮演着关键角色。在这篇文章中,我们将深入探讨如何在实现一个栈,从基本概念到具体的代码实现,再到实际应用场景的探讨。

1.栈的基本概念

在深入代码之前,先简单介绍栈的概念。栈是一个项的有序集合,其中添加(推入)和删除(弹出)项总发生在同一端,称为“栈顶”。他是后进先出的,就好像弹夹里面的子弹一样

在这里插入图片描述
在这里插入图片描述

2.选择数组还是链表?

数组的优点在于实现简单,访问时间快。但其缺点是大小固定,可能会有空间浪费或不足的问题。
链表的优点在于可以动态调整大小,内存利用率高。但其缺点是相对于数组,访问时间可能会稍慢。
我们用数组来实现
在这里插入图片描述


3. 定义栈结构

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include<stdbool.h>typedef int STDataType;
typedef struct Stack
{STDataType* a;STDataType top; STDataType capacity;
}ST;

接口

void STInit(ST* pst);
void STDestroy(ST* pst);
void STPush(ST* pst,STDataType x);
void STPop(ST* pst);
STDataType STTop(ST* pst);
bool STEmpty(ST* pst);
int STSize(ST* pst);

4.初始化栈

初始化是栈实现中的第一步。我们需要将栈顶 top 的初始值设为0,以表示栈为空,在这个实现中,栈被定义为包含动态数组、栈顶指针和容量的结构体。初始化函数 STInit 负责设置这些属性的初始状态。

// 初始化栈
void STInit(ST* pst)
{assert(pst);pst->a = NULL;       // 初始时,数组指针为空pst->top = 0;        // 栈顶指针初始为0,表示栈为空pst->capacity = 0;   // 初始容量为0
}

5.压栈操作

在实现压栈操作时,我们要考虑栈可能满的情况。如果栈已满,我们应该阻止进一步的压栈并给出适当的反馈。

// 检查并扩展栈的容量
void SLCheckCapacity(ST* pst)
{assert(pst);if (pst->top == pst->capacity){int newCapacity = (pst->capacity == 0) ? 4 : pst->capacity * 2;STDataType* tmp = (STDataType*)realloc(pst->a, sizeof(STDataType) * newCapacity);if (tmp == NULL){perror("realloc fail");exit(1); // 如果内存分配失败,则退出程序}pst->a = tmp;pst->capacity = newCapacity;}
}// 向栈中推入一个元素
void STPush(ST* pst, STDataType x)
{assert(pst);SLCheckCapacity(pst); // 检查并扩展容量pst->a[pst->top] = x; // 存放元素pst->top++;           // 栈顶指针增加
}

6.弹栈操作

弹栈时,我们需要确保栈不为空。如果尝试从空栈中弹出元素,应该返回一个错误指示。

// 从栈中弹出一个元素
void STPop(ST* pst)
{assert(pst);assert(pst->top > 0); // 确保栈不为空pst->top--;           // 栈顶指针减少
}

7.查看栈顶和判断栈空

这些操作相对简单,但它们对于栈的有效使用至关重要。

// 获取栈顶元素
STDataType STTop(ST* pst)
{assert(pst);assert(pst->top > 0); // 确保栈不为空return pst->a[pst->top - 1]; // 返回栈顶元素
}// 检查栈是否为空
bool STEmpty(ST* pst)
{assert(pst);return pst->top == 0; // 如果栈顶指针为0,则栈为空
}

9.销毁栈操作

在这个静态数组实现中,destroy 函数不是必须的,但是我们使用了动态分配的内存,则需要在此释放内存。

// 销毁栈
void STDestroy(ST* pst)
{assert(pst);free(pst->a);        // 释放栈内部的数组空间pst->a = NULL;       // 将数组指针置为空pst->top = 0;        // 栈顶指针重置为0pst->capacity = 0;   // 容量重置为0
}

10.测试并且打印栈内容

int main()
{ST stack;            // 定义栈变量ST* pst = &stack;    // pst 指向 stackSTInit(pst);         // 初始化栈// 向栈中添加元素STPush(pst, 1);STPush(pst, 2);STPush(pst, 3);STPush(pst, 4);// 打印并弹出栈中的元素while (!STEmpty(pst)){printf("%d ", STTop(pst));STPop(pst);}printf("\n");STDestroy(pst); // 销毁栈return 0;
}

运行结果如下:
在这里插入图片描述


栈的实际应用

栈在计算机科学中有着广泛的应用。从函数调用的内存管理到算法中的临时数据存储,栈的应用无处不在。理解栈如何在这些场景中工作,对于充分利用其潜力至关重要。


结论

栈不仅是一种基本的数据结构,而且是理解更复杂系统和算法的基石。通过在c语言中实现和应用栈,我们不仅能够加深对这一结构的理解,还能够提高我们的编程技巧和问题解决能力。我希望这篇文章能够帮助你更好地理解和实现栈。如果你有任何问题或想分享你的经验,请在评论区留言。

http://www.khdw.cn/news/65330.html

相关文章:

  • 莱芜网站建设设计外包百度推广关键词技巧定价
  • 全能网站建设完全自学sem对seo的影响有哪些
  • web页面设计原则外贸seo软件
  • 网站建设后商品进不去详情页青岛网站seo分析
  • 镜像网站做排名seo关键词排名优化教程
  • 做律师事务所网站代写软文费用全网天下实惠
  • pc网站开发语言免费推广引流平台
  • 网页设计与网站建设作品seo工具
  • 网站优化教程网站设计制作公司
  • 河北省造价信息价查询志鸿优化网官网
  • 天津做淘宝网站178软文网
  • 织梦电影网站免费模板网站推广优化排名教程
  • 下载的网站模板如何安装如何制作网站二维码
  • 眼科医院网站开发策划新闻联播直播 今天
  • 如何给网站做排名网络商城应该如何推广
  • 上海网站se0优化公司生成关键词的软件
  • 怎么查一个网站是谁做的百度榜
  • 湘潭做网站价格找磐石网络一流网站seo顾问
  • 百度网站建设开场话术郑州seo外包服务
  • 响应式网站建设济南百度推广天津总代理
  • 在discuz做网站女排联赛最新排行榜
  • 网架公司有哪些公司泉州百度seo
  • 馆陶网站建设怎样和政府交换友链
  • 建设网站收费北京网站推广服务
  • 阿里云机器怎么做网站池州网络推广
  • 企业网站添加图片谷歌广告上海有限公司官网
  • 本地搭建wordpress出现403seo搜索排名优化
  • 做网站托管如何提高网站在百度的排名
  • 电子商务的就业方向自己怎么优化我网站关键词
  • 用dedecms 做门户网站优秀营销软文范例500字