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

腾讯建设网站视频可靠的网站优化

腾讯建设网站视频,可靠的网站优化,表格制作手机软件,中国人去菲律宾做网站赌钱会抓吗引言 在计算机科学领域,数据结构是处理和组织数据的基础,而栈(Stack)作为一种非常重要且基础的数据结构,在很多场景中都有广泛的应用。本文将详细介绍栈的概念、实现方式,并结合提供的代码进行深入分析。 …

引言

在计算机科学领域,数据结构是处理和组织数据的基础,而栈(Stack)作为一种非常重要且基础的数据结构,在很多场景中都有广泛的应用。本文将详细介绍栈的概念、实现方式,并结合提供的代码进行深入分析。

栈的基本概念

栈是一种遵循后进先出(Last In First Out,LIFO)原则的线性数据结构。就像一摞盘子,最后放上去的盘子总是最先被拿走。栈主要有两个基本操作:入栈(Push)和出栈(Pop)。入栈操作是将元素添加到栈的顶部,而出栈操作则是移除栈顶的元素。除此之外,还有一些辅助操作,如判断栈是否为空(Empty)、获取栈顶元素(Top)以及获取栈中元素的个数(Size)等。

栈的代码实现

1. 头文件 Stack.h

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <assert.h>typedef int STDataType;typedef struct Stack
{STDataType* a;int top;int capacity;
}ST;//初始化与销毁
void STInit(ST* pst);
void STDestory(ST* pst);//入栈 出栈
void STPush(ST* pst, STDataType x);
void STPop(ST* pst);//取栈顶数据
STDataType STTop(ST* pst);//判空
bool STEmpty(ST* pst);//获取数据的个数
int STSize(ST* pst);

在这个头文件中,我们首先定义了栈的数据类型 STDataType,这里使用 int 作为示例。然后定义了栈的结构体 ST,包含三个成员:

  • a:一个指向 STDataType 类型的指针,用于动态分配内存来存储栈中的元素。
  • top:表示栈顶的位置,初始值为 0。
  • capacity:表示栈的当前容量。

接着声明了栈的各种操作函数,包括初始化、销毁、入栈、出栈、获取栈顶元素、判断栈是否为空以及获取栈中元素的个数。

2. 实现文件 Stack.cpp

#include "Stack.h"//初始化与销毁
void STInit(ST* pst)
{assert(pst);pst->a = NULL;pst->top = 0;pst->capacity = 0;
}
void STDestory(ST* pst)
{assert(pst);free(pst->a);pst->a = NULL;pst->top = pst->capacity = 0;
}//入栈 出栈
void STPush(ST* pst, STDataType x)
{assert(pst);//扩容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");exit(1);}pst->a = tmp;pst->capacity = newcapacity;}    //入栈pst->a[pst->top] = x;pst->top++;}
void STPop(ST* pst)
{assert(pst);assert(pst->top > 0);pst->top--;
}//取栈顶数据
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;
}//获取数据的个数
int STSize(ST* pst)
{assert(pst);return pst->top;
}
  • 初始化函数 STInit:将栈的指针 a 置为 NULLtop 和 capacity 都初始化为 0。
  • 销毁函数 STDestory:释放栈所占用的内存,并将 a 置为 NULLtop 和 capacity 重置为 0。
  • 入栈函数 STPush:首先检查栈是否已满,如果已满则进行扩容操作。扩容时,新容量为原容量的两倍(初始容量为 4),使用 realloc 函数重新分配内存。如果内存分配失败,输出错误信息并退出程序。然后将元素添加到栈顶,并将 top 加 1。
  • 出栈函数 STPop:检查栈是否为空,如果不为空则将 top 减 1,相当于移除栈顶元素。
  • 获取栈顶元素函数 STTop:检查栈是否为空,如果不为空则返回栈顶元素。
  • 判断栈是否为空函数 STEmpty:如果 top 等于 0,则栈为空,返回 true,否则返回 false
  • 获取栈中元素个数函数 STSize:直接返回 top 的值,即为栈中元素的个数。

 3. 测试文件 Test.cpp

#include "Stack.h"void test1()
{ST s;STInit(&s);STPush(&s, 1);STPush(&s, 2);STPush(&s, 3);STPush(&s, 4);while(!STEmpty(&s)){printf("%d ",STTop(&s));STPop(&s);}STDestory(&s);
}int main()
{test1();return 0;
}

在这个测试文件中,我们定义了一个测试函数 test1,首先创建一个栈 s 并进行初始化,然后依次将 1、2、3、4 入栈。接着使用 while 循环,只要栈不为空,就输出栈顶元素并将其出栈。最后销毁栈,释放内存。

总结

栈作为一种简单而强大的数据结构,在很多场景中都有重要的应用,如函数调用栈、表达式求值、括号匹配等。通过本文的介绍和代码实现,我们可以清楚地了解栈的基本概念和操作方式。同时,代码中的动态扩容机制保证了栈可以处理任意数量的元素。在实际应用中,我们可以根据具体需求对栈进行扩展和优化。

希望本文能帮助你更好地理解和掌握栈这种数据结构。如果你有任何疑问或建议,欢迎留言讨论。

以上就是关于数据结构栈的详细解析,希望对你有所帮助!

http://www.dtcms.com/wzjs/170090.html

相关文章:

  • 网站流程示意服装市场调研报告
  • 深圳 电子商务网站开发搜索引擎排名优化技术
  • 网站建设价格方案seo基础教程
  • 太原建网站的公司手机端竞价恶意点击
  • 一般做自己的网站需要什么能打开各种网站的搜索引擎
  • 网站如何做sem推广汕头seo按天付费
  • 专做轮胎的网站网络优化seo薪酬
  • 合肥网站建设司图网络营销推广方式
  • 深圳品牌策划公司推荐热门seo推广排名稳定
  • 漫画网站开发源码加入网络营销公司
  • 海尔公司网站建设现状环球网疫情最新消息
  • 网站开发待遇怎么样怎么在百度上添加自己的店铺地址
  • 免费软件app网站下载大全怎么打广告吸引客户
  • 阿里云做网站58百度搜索引擎
  • 濮阳建设网站网络销售推广公司
  • 权大师的网站是哪个公司做的怎么下载需要会员的网站视频
  • 新浪云sae免费wordpress网站seo免费培训视频
  • 公司简介网站模板百度号码认证平台
  • Wordpress图墙主题seo网站外包公司
  • 这几年做哪些网站能致富网络营销有什么岗位
  • 山东平台网站建设价格营销软件
  • 如何制作一个动态的网站的登录详细步骤页面爱站工具包的模块有哪些
  • cookies因预料之外的输出被阻止 wordpress淄博网站制作优化
  • 建站国外平台企业百度推广
  • 手机微网站怎么做短视频seo排名加盟
  • 做网站如何网站考虑优化搜索量排名
  • goule wordpress太原seo优化
  • 有初中生做的网站吗厦门百度seo排名
  • 网站建设 报价单百度广告客服电话
  • 搬瓦工可以长期做网站百度软文推广怎么做