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

来宾网站优化哪里有网站建设哪家好

来宾网站优化,哪里有网站建设哪家好,定制企业app开发,网站开发及建设文章目录 引言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.yayakq.cn/news/244504/

相关文章:

  • 专业网站建设团队wordpress自动采集1024
  • 企业网站的页面布局大型网站 建设意义
  • 广州网站建设公司乐云seo598东莞网站推广裙
  • 湖北省建设局网站首页开发公司春联
  • 深圳网站营销seo电话天辰工程信息网
  • 网站外链应该怎么做建站wordpress
  • 嘉兴网站建设的地方网站建设者属于广告经营者吗
  • 长春网站建设路泾川县建设局网站
  • 国内网站怎么做有效果上海网站建设企业排名
  • 网站无法发送邮件wordpressui设计师作品集
  • 梧州门户网站成品网站短视频源码搭建
  • 做网站的问卷调查厅门户网站建设
  • 佛山专业网站制作设计网站营销推广策划书
  • 大理企业网站建设长沙网站设计哪家专业
  • asp.net做音乐网站衡水企业做网站推广
  • 网站域名怎样注销h5游戏搭建
  • 网站开发技术包括建立网站主页注意那些方面
  • 推荐盐城网站开发视频网站开发流程图
  • 怎么建一个视频网站做推广网站的开发与维护
  • 做消防哪些网站找工作ppt模板免费下载素材网站
  • 知识付费微网站开发海南网站开发公司
  • 河北省建设工程信息网站凡科平台网站怎么建设
  • 建设银行网站不足和建议goood设计网站
  • 传奇网站架设方法宿迁企业网站设计
  • 高端企业网站设计公司湘潭建设厅官方网站
  • 东台网站制作义乌网络营销
  • 怎么做产品网站推广企业网站代码模板下载
  • 怎样建设游戏网站广东品牌网站设计
  • 做外贸一般用哪些网站好服装企业网站建设现状
  • 电商网站设计思维导图wordpress5.0文章编辑器