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

合肥市庐阳区住房和城乡建设局网站广告开户

合肥市庐阳区住房和城乡建设局网站,广告开户,思乐网站建设,广告设计与制作基础知识目录 1. 栈 ​编辑 1.2 栈的实现 2. 代码的实现 2.1 初始化栈和销毁栈 2.2栈顶元素的插入 2.3栈顶元素的删除 栈元素删除 2.4栈顶元素的获取和栈元素的个数 1. 栈 1.1 栈的概念和结构 栈(Stack)是一种线性存储结构,它具有如下特点: &#xff0…

目录

1. 栈

​编辑

 1.2 栈的实现

2. 代码的实现

2.1 初始化栈和销毁栈

2.2栈顶元素的插入

2.3栈顶元素的删除

栈元素删除

2.4栈顶元素的获取和栈元素的个数


1. 栈

1.1 栈的概念和结构

栈(Stack)是一种线性存储结构,它具有如下特点:
(1)栈中的数据元素遵守”先进后出”(First In Last Out)的原则,简称FILO结构。
(2)限定只能在栈顶进行插入删除操作。

压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。
出栈:栈的删除操作叫做出栈。出数据也在栈顶

注意:我们在进行数据插入和删除操作中,都是在栈顶实现的,而另一端叫做栈底。

我们借用一下这个图来说明:

 1.2 栈的实现

我们这里可以通过两种方法实现,顺序表链表。

这里我们会发现链表要尾插或者尾删需要便利一遍链表,效率低;顺序表尾插尾删很快,但是还要解决扩容问题。

所以这里我们就引出了栈这个东西

2. 代码的实现

这里我们需要说明一下,之前我们在实现链表或者顺序表双向链表中都用的是size,为了更好的明确个数。

这里top指的是栈顶元素,如果初始化为 ” -1 “ ,指的是栈顶元素;如果为 “ 0 ” ,指的是栈顶的下一个元素。

这里面我建议是初始化为0

  • top还可以表示元素的个数,可以用来判断栈是否满了
  • 插入元素的时候直接在top的位置插入就行,然后再top++即可

 废话不多先来个头文件

typedef int STDataType;
typedef struct Stack
{STDataType* a;int top;int 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);

2.1 初始化栈和销毁栈

我们首先要检查一下结构体是否为空,这里我们要注意一下

void STInit(ST* pst)
{assert(pst);pst->a = NULL;//pst->top = -1;   // top 指向栈顶数据pst->top = 0;   // top 指向栈顶数据的下一个位置pst->capacity = 0;
}

这里我们断言结构体不为空在继续,释放我们开辟的空间,将其他数据置为0

void STDestroy(ST* pst)
{assert(pst);free(pst->a);pst->a = NULL;pst->top = pst->capacity = 0;
}

2.2栈顶元素的插入

这里面我们要判断储存空间是否足够,如果没有开辟,我们可以先开辟一些空间出来;如果栈空间满了,直接将栈空间扩大二倍

void STPush(ST* pst, STDataType x)
{if (pst->top == pst->capacity){int newCapacity = pst->capacity == 0 ? 4 : pst->capacity * 2;STDataType* tmp = (STDataType*)realloc(pst->a, newCapacity * sizeof(STDataType));if (tmp == NULL){perror("realloc fail");return;}pst->a = tmp;pst->capacity = newCapacity;}pst->a[pst->top] = x;pst->top++;
}

2.3栈顶元素的删除

注意:当top为0,代表我们没有元素,不能再减下去,需要一个函数判断一下

判断函数

bool STEmpty(ST* pst)
{assert(pst);/*if (pst->top == 0){return true;}else{return false;}*/return pst->top == 0;
}

栈元素删除

void STPop(ST* pst)
{assert(pst);assert(!STEmpty(pst));pst->top--;
}

2.4栈顶元素的获取和栈元素的个数

这里面我们初始化为0,所以我们返回栈顶元素前一个元素即可;如果为空,需要我们断言一下

STDataType STTop(ST* pst)
{assert(pst);assert(!STEmpty(pst));return pst->a[pst->top - 1];
}

元素个数

int STSize(ST* pst)
{assert(pst);return pst->top;
}

以上就是今天栈实现的分享,如果喜欢的话请三联支持一下吧,感谢你的收看,我们下期再见!!!

http://www.hrbkazy.com/news/41164.html

相关文章:

  • 怎样更换网站cms百度指数有三个功能模块
  • wap网站html模板淘宝推广怎么推
  • 北京顺义建设委员会网站首页发稿网
  • 百度云建站网站建设产品推广文章
  • 东莞樟木头哪里有做网站的搜索引擎优化好做吗
  • 网站的图片怎么做显示和隐藏网站推广入口
  • wordpress 主题 更改郑州网站优化推广
  • 网站建设优化服务如何优化seo搜索
  • 500强企业排名一览表搜索引擎优化方法有哪几种
  • 松江做移动网站下载百度app免费下载安装
  • 微信如何做微商城网站建设广州今日刚刚发生的新闻
  • 做电脑系统哪个网站百度竞价培训班
  • centos怎么安装wordpressseo优化范畴
  • 柏乡企业做网站站长统计app进入网址新版小猪
  • 新会网站建设痘痘如何去除效果好
  • 长沙企业网站建设收费便民信息微信平台推广
  • 搭建wordpress深圳百度快照优化
  • wordpress 安装 权限项目优化seo
  • 鹰潭市城乡建设局老网站百度移动端关键词优化
  • 本地环境搭建网站国际新闻消息
  • 开网上授课的网站应该怎么做2022年7到8月份的十大新闻
  • 猪八戒设计平台官网seo网络营销推广公司深圳
  • 怎么制作网站横幅百度搜索引擎的功能
  • 网站开头flash怎么做沈阳沈河seo网站排名优化
  • 如何做网站的下载的二维码经典软文推广案例
  • 怎样做免费网站卖东西网站注册域名
  • 住房和城乡建设委网站夫唯seo
  • 深圳的网站建设公司价格企业网站建设平台
  • 网站做等保网络营销推广方案论文
  • wordpress修改首页刷移动端seo软件