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

我想网上开店怎么开淄博网站排名seo

我想网上开店怎么开,淄博网站排名seo,iis7 添加网站,设计类专业选科要求大家好,今天带来的是关于数据结构初阶中的栈和队列的内容,一起来看看吧!!! 1.栈的概念 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为…

大家好,今天带来的是关于数据结构初阶中的栈和队列的内容,一起来看看吧!!!

1.栈的概念

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

类比:只有一端开口的羽毛球桶
在这里插入图片描述
在这里插入图片描述

2.栈的实现

栈的实现一般可以用数组或链表实现,相较而言,数组的结构实现更优一点,因为数组在尾上插入数据的代价比较小。因此,以下用数组实现栈。

2.1初始化和销毁

初始化的一个难题就是top的赋值问题,以及对应的哪种情况。
分两种情况,采用假设法+画图,很快就能理解!

1.top=-1,假设入栈一个数据1后,top++,此刻top=0,栈顶数据为1,在数组中a[0]表示数组首元素,即top指向栈顶数据。
2.top=0,假设入栈一个数据1后,top++,此刻top=1,栈顶数据为a[0], a[1]表示数组第二个数据,即top指向栈顶数据的下一个数据。
在这里插入图片描述
考虑到我想用top代表有效数据个数,因此我这里用的是方法2,令ps->top=0,top指向的是栈顶数据的下一个数据,也同时代表了栈内数据个数。

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

2.2入栈

之前我们学习了有关顺序表的知识,这里的代码理解起来就很容易了。
插入数据之前,要判断当前内存是否足够,若不够,要扩容。
在这里插入图片描述

2.3出栈

出栈就是删除元素,因为栈内数据只能从栈顶入,栈顶出。所以,出栈一次,只用删除一次栈顶数据即可。
在这里插入图片描述

2.4获取栈顶元素

之前初始化根据我的赋值是:top=0;因此top指向的是栈顶元素的下一个数据。那么要获取栈顶元素,就是获取top的前一个元素,也就是ps->a[top-1].
在这里插入图片描述

2.5获取栈有效元素个数

之前根据初始化赋值我的设置,令top=0,因此top也恰好代表了栈中的有效数据个数。
故直接返回ps->top即可。
在这里插入图片描述

2.6判空

当栈为空时,表示栈中没有任何元素。当栈非空时,表示栈中至少有一个元素。
因此只需要判断栈中有效数据个数是否不为0即可。
这里1 0 我们想到了用bool函数来表示。

在这里插入图片描述

3.总结

写到这里,我们就实现了一个栈,有了前面顺序表的基础,是不是感觉代码写起来还是比较简单的。这里给出总代码。

3.1 test.c

//test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<assert.h>
#include"Stack.h"int main()
{ST ps;STInit(&ps);STPush(&ps, 1);STPush(&ps, 2);STPush(&ps, 3);STPush(&ps, 4);//printf("%d\n",STTop(&ps));//访问栈中所有元素while (!STEmpty(&ps)){printf("%d ", STTop(&ps));STPop(&ps);}STDestroy(&ps);return 0;
}

3.2 Stack.c

//Stack.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"Stack.h"//初始化 
void STInit(ST* ps)
{assert(ps);ps->a = NULL;ps->capacity = 0;ps->top = 0;//top指向栈顶的下一个数据,可画图理解//ps->top=-1;//top指向栈顶数据,画图理解
}//销毁
void STDestroy(ST* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->top = ps->capacity = 0;
}//入栈
void STPush(ST* ps, STDataType x)
{assert(ps);//插入之前判断内存够不够if (ps->top == ps->capacity){//扩容int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;STDataType* tmp =(STDataType*) realloc(ps->a, newcapacity * sizeof(STDataType));if (tmp == NULL){perror("realloc fail!");}ps->a = tmp;ps->capacity = newcapacity;}//插入数据ps->a[ps->top]=x;//根据初始化阶段,我这里的top指向的是栈顶数据的下一个数据,因此直接插入数据即可ps->top++;
}//出栈
void STPop(ST* ps)
{assert(ps);ps->top--;
}//获取栈顶元素
STDataType STTop(ST* ps)
{assert(ps);assert(ps->top > 0);return ps->a[ps->top - 1];
}//获取栈中有效数据个数
int STSize(ST* ps)
{assert(ps);return ps->top - 1;
}//判空
bool STEmpty(ST* ps)
{assert(ps);return ps->top == 0;//等价于/*if(ps->top==0){return true;}else{return false;}*/
}

3.3 Stack.h

//Stack.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<assert.h>//定义一个动态的栈
typedef int STDataType;typedef struct Stack
{STDataType* a;int top;//栈顶int capacity;//容量
}ST;//初始化
void STInit(ST* ps);//传的参数是结构体指针,指向栈
//销毁
void STDestroy(ST* ps);
//入栈
void STPush(ST* ps, STDataType x);//传的参数是结构体指针和数据
//出栈
void STPop(ST* ps);//传的参数是结构体指针和数据
//获取栈顶元素
STDataType STTop(ST* ps);//栈中元素的类型是STDataType,所以函数返回值的数据类型是STDataType
//获取栈中有效数据个数
int STSize(ST* ps);
//判空
bool STEmpty(ST* ps);

在这里插入图片描述

以上就是数据结构中栈的有关内容,谢谢观看!


文章转载自:

http://5BR7GL5W.tjwLp.cn
http://x91KcpBd.tjwLp.cn
http://dF34zwV5.tjwLp.cn
http://1ENq4FjQ.tjwLp.cn
http://3jmREusB.tjwLp.cn
http://s3CfMpgX.tjwLp.cn
http://zECOIEhG.tjwLp.cn
http://ILTv9S4N.tjwLp.cn
http://qnAYEb1n.tjwLp.cn
http://0B3Z9dPh.tjwLp.cn
http://vrSjtYyr.tjwLp.cn
http://DAjyxAVM.tjwLp.cn
http://pfO6PmCc.tjwLp.cn
http://PrzShb1u.tjwLp.cn
http://VJZnpnPb.tjwLp.cn
http://F8AhJDsN.tjwLp.cn
http://uu74vvkm.tjwLp.cn
http://67KLj4MS.tjwLp.cn
http://z80LFNbT.tjwLp.cn
http://oTNelGEz.tjwLp.cn
http://XHj0ZoMt.tjwLp.cn
http://xlgs0fkt.tjwLp.cn
http://xrYlth8A.tjwLp.cn
http://GVvK21g1.tjwLp.cn
http://S0XGC7ZQ.tjwLp.cn
http://AgUZGYF6.tjwLp.cn
http://gVbcf3FI.tjwLp.cn
http://a4Yebjh4.tjwLp.cn
http://gQzLX8fG.tjwLp.cn
http://LWcqMf36.tjwLp.cn
http://www.dtcms.com/wzjs/725434.html

相关文章:

  • 网站建设的维护工作有哪些图跃网站建设
  • 宁夏住房建设厅网站企业宣传片脚本
  • 免备案域名购买网站厦门网站制作阳哥
  • 网站 粘度北京市建设规划网站
  • 修改网站空间服务器密码云阿里云做网站
  • 企业门户网站开发公司黄骅港务集团有限公司
  • 网站建设与推广长春自己怎么做淘宝网站
  • 网站设计报价是多少钱看房地产的app在哪看
  • 惠州建设局网站做外贸需要关注的网站有什么问题
  • 建设局发公告的网站免费软件漫画
  • 吉林省建设集团有限公司网站网站开发工具比较
  • 商务网站开发与建设论文百度小说官网
  • 用html5做的简单的网站建设网站培训班
  • 大型网站制作软件什么做的网站
  • 天津公司网站如何制作字体设计软件 免费
  • 文明网站机制建设深圳市建设混凝土投标网站
  • 铁岭网站开发公司企业网站建设原则有哪些
  • seo精华网站怎样做seo网站链接
  • 搬瓦工如何搭建做网站兰州网站建设与优化
  • 昆明企业做网站太原师范学院教务网络管理系统
  • 苏州做网站的wordpress 仿微信主题
  • 新手建网站什么类型好wordpress上下篇
  • 东莞公司网站建设教程鞍山在百度做个网站多少钱
  • 学习网站后台维护vs2012怎么做网站
  • 怎么用 c文件做网站企业网站建设的推广方式
  • 网站seo找准隐迅推辽宁工程咨询招投标交易平台
  • 建设网站的价格是多少延吉网站优化
  • 贵州企业网站建设设计网站收录入口
  • 互联网网站项目方案书房屋设计图纸平面图
  • 网站开发连接效果最新款淘宝客源码整网站程序模板+后台带自动采集商品功能带文章