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

安徽海绵城市建设协会网站北京seo推广公司

安徽海绵城市建设协会网站,北京seo推广公司,wordpress 产品相册插件,做网站中的镜像是什么详解C语言动态实现顺序栈~😎前言🙌预备小知识💞栈的概念及结构整体实现内容分析💞1.头文件编码实现🙌2.功能文件编码实现🙌3.测试文件的编写:🙌总结撒花💞😎博…

详解C语言动态实现顺序栈~😎

  • 前言🙌
  • 预备小知识💞
    • 栈的概念及结构
  • 整体实现内容分析💞
    • 1.头文件编码实现🙌
    • 2.功能文件编码实现🙌
    • 3.测试文件的编写:🙌
  • 总结撒花💞

追梦之旅,你我同行

   
😎博客昵称:博客小梦
😊最喜欢的座右铭:全神贯注的上吧!!!
😊作者简介:一名热爱C/C++,算法等技术、喜爱运动、热爱K歌、敢于追梦的小博主!

😘博主小留言:哈喽!😄各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮助,话不多说,文章推上!欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘
在这里插入图片描述

前言🙌

    哈喽各位友友们😊,我今天又学到了很多有趣的知识现在迫不及待的想和大家分享一下!😘我仅已此文,手把手带领大家详解C语言动态实现顺序栈~ 要是为了运用所学的链表的相关知识和算法。用代码来实现顺序栈,也就是用数组来实现栈。都是精华内容,可不要错过哟!!!😍😍😍

预备小知识💞

栈的概念及结构

在这里插入图片描述

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

整体实现内容分析💞

栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小顺序栈的设计思想是用数组,相比于静态数组,动态数组来设计的话会更加灵活一点。然后还是和链表那样实现栈的基本功能,这里就不赘述了。

1.头文件编码实现🙌

头文件的编写的整体思路分析:

其实大致的实现和链栈差不多,这里先定义一个栈的结构体,用typedef给结构体和数据类型取别名,然后就是各种功能函数的声明,和上述链表差不多

#include<stdio.h>
#include<assert.h>
#include<stdbool.h>#include<stdlib.h>typedef int StDatetype;
typedef struct StackNode
{StDatetype* a;StDatetype top;StDatetype capacity;
}ST;
//初始化
void StackInit(ST*ps);
//销毁
void StackDestory(ST* ps);
//入栈
void StackPush(ST* ps, StDatetype x);
//出栈
void StackPop(ST* ps);
//栈上的数据个数
int  StackSize(ST* ps);
//栈顶元素
StDatetype StackTop(ST* ps);bool StackEmpty(ST*ps);void StackPrint(ST* ps);

2.功能文件编码实现🙌

功能文件的编写的整体思路分析:

这里是功能函数的实现,需要注意的地方和编写的算法和链栈实现差不多。只是用数组实现的话,在扩容上不够灵活,会产生空间浪费的问题为了减少空间浪费,这里采用动态数组,扩容时采用增加2倍,比较合理的申请空间。然后就是要通过画图,来帮助自己理清指针的指向,需要注意的是free掉指针后一定要将指针置为NULL,不然会造成野指针的问题。

#include"Stack.h"//初始化
void StackInit(ST* ps)
{assert(ps);ps->a = NULL;ps->capacity = 0;ps->top = 0;}
//销毁
void StackDestory(ST* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->capacity = ps->top = 0;}
//入栈
void StackPush(ST* ps, StDatetype x)
{assert(ps);if (ps->top == ps->capacity){StDatetype newnode = ps->capacity == 0 ? 4 : ps->capacity * 2;StDatetype* temp = (StDatetype*)realloc(ps->a, sizeof(StDatetype)*newnode);if (temp == NULL){printf("realloc fail\n");exit(-1);}ps->a = temp;ps->capacity = newnode;}ps->a[ps->top] = x;ps->top++;}
//出栈
void StackPop(ST* ps)
{assert(ps);assert(!StackEmpty(ps));ps->top--;}
//栈上的数据个数
int  StackSize(ST* ps)
{  assert(ps);return ps->top;
}
//栈顶元素
StDatetype StackTop(ST* ps)
{assert(ps);assert(!StackEmpty(ps));return ps->a[ps->top - 1];
}bool StackEmpty(ST* ps)
{return ps->top == 0;
}
void StackPrint(ST* ps)
{while (!StackEmpty(&ps)){printf("%d", StackTop(&ps));StackPop(&ps);}printf("\n");
}

3.测试文件的编写:🙌

#include"Stack.h"void StackTest()
{ST st;StackInit(&st);StackPush(&st, 1);StackPush(&st, 2);StackPush(&st, 3);StackPush(&st, 4);printf("栈的输出\n");while (!StackEmpty(&st)){printf("%d", StackTop(&st));StackPop(&st);}StackDestory(&st);
}int main()
{StackTest();return 0;
}

功能测试结果展示图:
在这里插入图片描述

总结撒花💞

   本篇文章旨在分享详解C语言实现动态版顺序栈。希望大家通过阅读此文有所收获!😘如果我写的有什么不好之处,请在文章下方给出你宝贵的意见😊。如果觉得我写的好的话请点个赞赞和关注哦~😘😘😘

http://www.shuangfujiaoyu.com/news/33863.html

相关文章:

  • wordpress更换域名插件石家庄seo外包公司
  • 龙岗网站建设要多少钱上海牛巨微seo优化
  • wordpress用法杭州seo关键词优化公司
  • 金融审核网站制作西安网络公司
  • 网站建设包含哪些网络服务提供者不是网络运营者
  • 住房和城乡建设部网站投诉电话长沙seo运营
  • 杨浦专业做网站网站seo在线诊断
  • seo和网站建设那个先学做一个企业网站需要多少钱
  • 有关做详情页的参考网站2345网址导航安装
  • tornado做网站河北网站推广公司
  • 信用卡申请网站建设百度公司全称叫什么
  • 公司网站模版微信怎么推广找客源
  • 网站怎样快速排名长沙专业竞价优化首选
  • 济南网站建设鲁icp备广告策划案优秀案例
  • 南昌网站建设方案外包网页制作在线生成
  • 生活家装饰seo网站优化是什么
  • 刷qq会员自己做网站sem代运营费用
  • 京东网站制作优点中国万网域名注册
  • 郑州网站建设喝彩百度seo优化招聘
  • 淘宝联盟的网站怎么自己做正规的培训学校
  • 网站建设及政务公开工作网站统计数据分析
  • 呼和浩特市做网站公司好的优化营商环境的金句
  • 福州专业网站建设推广费用优化大师
  • 网站搭建报价单yandex搜索入口
  • 湖北 网站 备案 时间广告软文外链平台
  • 哪个网站做童装批发巩义网络推广公司
  • 广州新型病毒最新情况seo课程培训视频
  • 写网站建设的软文中囯联通腾迅
  • 可靠的网站建设图如何进行网站性能优化
  • 浙江省住房城乡建设厅网站首页商城小程序