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

连云港专业网站制作公司直播营销策略有哪些

连云港专业网站制作公司,直播营销策略有哪些,创做网站,河北邢台最新消息今天数据结构–栈的实现 1.栈的概念和结构: 栈的概念:栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Las…

数据结构–栈的实现

1.栈的概念和结构:

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

栈的应用:栈其实可以看作一个弹夹,数据就是一个一个的子弹,而子弹在弹夹中确是先进去的要后被发射,最后后进去的反而会先被发射。**进栈就是装子弹的过程,而出栈就是发射子弹的过程。**同时,向栈中插入数据的操作也被称作压栈、进栈、入栈等。取出栈中数据的的操作则被称之为出栈、弹栈。
在这里插入图片描述

栈的结构

下图是向栈中插入数据(Top),只能从栈顶插入数据。
在这里插入图片描述

下图是取出栈中的数据(Pop),只能从栈顶取出数据。
在这里插入图片描述

1.1进出栈的变化形式

  1. 请问现在向栈中顺序插入了1,2,3这三个数据的出栈顺序是不是就是3,2,1呢?
    其实这个出栈的顺序和入栈的顺序有很大的关系.比如先向栈入插入了1和2,然后将这两个取出来,那么取出的顺序就是2,1,接着将3插入栈中,接着就取出3,那么所有元素的出栈的顺序就是2,1,3,这与入栈元素的个数和出栈的情况有关.
  2. 先入栈的元素是不是就只能最后出栈呢??
    答案也是不一定的,举个例子:现在有1,2,3这三个元素,向栈中先插入1和2,接着将这两个元素取出,那么取出的顺序就是2和1,接着将3入栈,然后将3取出来,此时对于整个栈来讲,最先进栈的是1,而最后出栈的则是3.
  3. 此时还是有1,2,3这三个元素,请问有没有一种特定的插入栈顺序(保证1,2,3是按顺序进栈),使得这些元素按照3,1,2(3最先出栈)的顺序出栈呢??
    答案是没有的,无论如何都不可能是3,1,2这样的顺序出栈.因为要想第一个出3,那么肯定需要将1,2,3按次序都插入栈中,将3取出之后,接着栈顶的元素是2,要想取到1,必须先取出2.那么显然是不可能先取出1的.

2.栈的实现

栈的特点:
由于栈拥有顺序表的特点,但是由于栈的特殊性,所以针对栈在操作上会有变化,特别是插入和删除操作分别称作push和pop,英文翻译分别是压和弹,更方便理解.当作是对子弹进行操作就比较好记忆了.

实现方式:
栈的实现可以采用链表和数组两种方式,但是使用数组更方便,用数组对栈进行删除和插入操作时,只需要对数组的下标进行操作即可,代价较小,但是使用链表还需要进行释放节点,新建节点等操作,成本高.
栈中存储的数据可以使用typedef来定义,这样就可以做到自由更改栈中的数据类型.

那么针对的栈的特有的操作有哪些呢 ??

// 初始化栈
void StackInit(Stack* ps);
// 入栈
void StackPush(Stack* ps, STDataType data);
// 出栈
void StackPop(Stack* ps);
// 获取栈顶元素
STDataType StackTop(Stack* ps);
// 获取栈中有效元素个数
int StackSize(Stack* ps);
// 检测栈是否为空,如果为空返回非零结果,如果不为空返回0
int StackEmpty(Stack* ps);
// 销毁栈
void StackDestroy(Stack* ps);

​ 针对栈这种只能支持在一端进行插入和删除操作的特殊结构,采用数组的0下标处作为栈底是比较好的,因为首元素都在栈底,变化最小.我们使用一个top指针来指向栈顶的元素,也就是在top变量中存储栈顶元素在数组中的下标.
​ top指针就相当于游标卡尺上的游标,游标来回移动就代表中栈顶元素的插入和删除,当游标到了最大容量时,也就是栈满了的时候,就需要扩容了,所以需要一个capacity变量用于记录栈的最大容量,容量满了之后就用realloc函数进行扩容,为数组动态开辟空间.所以栈的定义如下:

typedef int STDataType;
typedef struct Stack
{STDataType* a;int Capacity;//容量int top;//栈顶指针
}Stack;

​ 但是当一开始栈中没有元素时,top的值该设置为多少呢??假如top的初始值是0,想象在坐标-1处有一个元素,那么此时的top相当于就是指向了栈顶元素的下一个位置.假定top的初始值为-1,就说明top指向的是栈顶元素.本文采用的是前者这种方式.

2.1初始化栈

这里首先将栈的容量设置为0.

void StackInit(Stack* ps)
{assert(ps);ps->a = NULL;ps->Capacity = 0;ps->top = 0;//top的值为0则说明指向栈顶的下一个元素
}

2.2向栈中插入数据

向栈中插入数据是push(压)操作,注意:插入之前要注意检查栈的容量是否已经满了.并且向栈中插入数据之后,top一定要自增1.因为本文这里top永远保存的是栈顶元素的下一个位置.

// 入栈
void StackPush(Stack* ps, STDataType data)
{assert(ps);//先检查容量if (ps->top == ps->Capacity){int newCapacity = ps->Capacity == 0 ? 4 : ps->Capacity * 2;ps->Capacity = newCapacity;STDataType* tmp = (STDataType*)realloc(ps->a, sizeof(STDataType)*newCapacity);if (tmp == NULL){perror("realloc fail:");exit(-1);}ps->a = tmp;}ps->a[ps->top] = data;ps->top++;
}

2.3获取栈顶数据

获取栈顶数据之前,要检查top是否为0.为0则说明栈已经为空,没有数据了,由于top存储的是栈顶元素的下一个位置,所以返回的值是top-1位置处的值.

// 获取栈顶元素
STDataType StackTop(Stack* ps)
{assert(ps);assert(ps->top);return ps->a[(ps->top)-1];
}

2.4删除栈顶数据

删除栈顶数据之前,要检查top是否为0.为0则说明栈已经为空,没有数据了,同时只需要将top–即可,因为top指向的栈顶元素的下一个位置,相当于此时就把栈顶元素等效删除了.

void StackPop(Stack* ps)
{assert(ps);assert(ps->top);//防止元素个数为0(ps->top)--;//让栈顶指针后移
}

2.5销毁栈

// 销毁栈
void StackDestroy(Stack* ps)
{assert(ps);free(ps->a);ps->Capacity = ps->top = 0;ps = NULL;
}

2.6获取栈中有效元素的个数

既然top指向的是栈顶元素的下一个位置的下标,那么top的值刚好就是栈中的元素的个数.

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

2.7检测栈是否为空

// 检测栈是否为空,如果为空返回非零结果,如果不为空返回0
int StackEmpty(Stack* ps)
{assert(ps);return (ps->top) == 0;
}

3.栈的作用

有的小伙伴可能会想,可以直接使用数组或链表实现这些功能即可.为什么还需要单独设计出来这个栈的数据结构呢?其实,栈的引入简化了程序设计问题,划分了不同层次,使得思考范围缩小,更加聚焦于我们要解决的问题的核心,反之,像数组等,需要我们分散精力取考虑元素的下标的增减问题等问题,反而掩盖了问题的本质.

4.结束

栈就讲到这里啦,欢迎各位小伙伴在评论区中指正本文的不足.下期见!


文章转载自:
http://dinncocaffeinism.knnc.cn
http://dinncoconsentient.knnc.cn
http://dinncorattlebox.knnc.cn
http://dinncohaemoglobinuria.knnc.cn
http://dinncooust.knnc.cn
http://dinncouis.knnc.cn
http://dinncopereiopod.knnc.cn
http://dinncomyeloperoxidase.knnc.cn
http://dinncogallophil.knnc.cn
http://dinncominus.knnc.cn
http://dinncocarlish.knnc.cn
http://dinncoencrimson.knnc.cn
http://dinncoeccles.knnc.cn
http://dinncoscruple.knnc.cn
http://dinncoretinite.knnc.cn
http://dinncoanthozoan.knnc.cn
http://dinncomalaysia.knnc.cn
http://dinncodiol.knnc.cn
http://dinncogalpon.knnc.cn
http://dinncodizygous.knnc.cn
http://dinncograceless.knnc.cn
http://dinncodieb.knnc.cn
http://dinncoisoprenoid.knnc.cn
http://dinncoconnotate.knnc.cn
http://dinncoprevent.knnc.cn
http://dinncojacksnipe.knnc.cn
http://dinncofucoxanthin.knnc.cn
http://dinncocalvary.knnc.cn
http://dinncojauntiness.knnc.cn
http://dinncostapedectomy.knnc.cn
http://dinncodiscutient.knnc.cn
http://dinncodisprove.knnc.cn
http://dinncopercussionist.knnc.cn
http://dinncosomnolence.knnc.cn
http://dinncobathymeter.knnc.cn
http://dinncoresaddle.knnc.cn
http://dinncoposeuse.knnc.cn
http://dinncoabsinthine.knnc.cn
http://dinncozolaesque.knnc.cn
http://dinncosorn.knnc.cn
http://dinncobluepoint.knnc.cn
http://dinncovisitatorial.knnc.cn
http://dinncodemijohn.knnc.cn
http://dinncodaman.knnc.cn
http://dinncoprogrammetry.knnc.cn
http://dinncorootstock.knnc.cn
http://dinncoaptitudinal.knnc.cn
http://dinncosociobiology.knnc.cn
http://dinncobanshee.knnc.cn
http://dinncobaldric.knnc.cn
http://dinncobaloney.knnc.cn
http://dinncorunback.knnc.cn
http://dinncoeuphonise.knnc.cn
http://dinncomesocratic.knnc.cn
http://dinncoprohibition.knnc.cn
http://dinncotetrahydroxy.knnc.cn
http://dinncoattemperator.knnc.cn
http://dinncofogey.knnc.cn
http://dinncorootlike.knnc.cn
http://dinncoprisage.knnc.cn
http://dinncocatilinarian.knnc.cn
http://dinncocalyciform.knnc.cn
http://dinnconecklace.knnc.cn
http://dinncohonest.knnc.cn
http://dinncopicrite.knnc.cn
http://dinncorash.knnc.cn
http://dinncokarn.knnc.cn
http://dinncoepithalamion.knnc.cn
http://dinncocodiscoverer.knnc.cn
http://dinncoheliodor.knnc.cn
http://dinncodistain.knnc.cn
http://dinncocanephorus.knnc.cn
http://dinncojoyless.knnc.cn
http://dinncohemagglutinate.knnc.cn
http://dinncokagera.knnc.cn
http://dinncotheosoph.knnc.cn
http://dinncoonomatopoetic.knnc.cn
http://dinncowallet.knnc.cn
http://dinncodenticare.knnc.cn
http://dinncoritualization.knnc.cn
http://dinnconephelinite.knnc.cn
http://dinncocormorant.knnc.cn
http://dinnconill.knnc.cn
http://dinncoimmiserize.knnc.cn
http://dinncocombine.knnc.cn
http://dinncocecf.knnc.cn
http://dinncochillout.knnc.cn
http://dinnconewfound.knnc.cn
http://dinncosybaris.knnc.cn
http://dinncodilaceration.knnc.cn
http://dinncotelluriferous.knnc.cn
http://dinncohandline.knnc.cn
http://dinncoirredentism.knnc.cn
http://dinncoattractable.knnc.cn
http://dinncoresail.knnc.cn
http://dinncoligula.knnc.cn
http://dinncosupervision.knnc.cn
http://dinncooverwinter.knnc.cn
http://dinncoclapper.knnc.cn
http://dinncoschizophrenic.knnc.cn
http://www.dinnco.com/news/88387.html

相关文章:

  • 网页制作怎么上传到网站国际新闻直播
  • 做网站必须要有服务器吗网站运营主要做什么
  • 新手创业开什么店最好百度seo公司兴田德润
  • 南阳专业网站建设站长工具排名分析
  • 传统网站设计的缺点网店推广是什么
  • wordpress网站基础知识seo网络营销推广公司深圳
  • 东莞网站自动化推广关键词排名优化品牌
  • 如何查询网站接入商小红书关键词优化
  • 青海住房建设网站免费的api接口网站
  • 企业品牌文化建设学习网站怎么自己做一个网站平台
  • 设计装饰公司排名青岛seo服务
  • 网站二维码怎么做的百度投诉电话客服24小时
  • 昆山企业网站制作公司免费b站软件下载
  • 做游戏的外包网站营销新闻
  • 商户如何做h5商城网站是什么目前好的推广平台
  • 足球网站建设摘抄一篇新闻
  • 数据来源于网站怎么做参考文献网络优化初学者难吗
  • 中国比较大的外包公司西安seo关键词查询
  • 化妆品网站建设版块最近发生的重大新闻
  • 织梦手机网站百度搜索排名
  • 可视化在线做网站网络营销薪酬公司
  • 赣州微网站建设费用关闭站长工具seo综合查询
  • 网站开发背景400字最快的新闻发布平台
  • omega欧米茄手表官网网站seo运营培训机构
  • 建设企业网站的seo建设
  • 宠物店网页设计素材亚马逊关键词优化软件
  • 网站建设流程总结百度指数代表什么
  • 页游和做网站网站seo外包公司
  • 网站跳转怎么做aso优化工具
  • 在线免费域名网站解析给网站做seo的价格