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

毕设做网站可以用模板吗百度seo优化工具

毕设做网站可以用模板吗,百度seo优化工具,深圳商城网站设计费用,恩施seo💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《数据结构与算法》 期待您的关注 ​ 目录 一、引言 🎄栈(Stack)是什么? &#x1…

     

            💓 博客主页:倔强的石头的CSDN主页 

           📝Gitee主页:倔强的石头的gitee主页

            ⏩ 文章专栏:《数据结构与算法》

                                  期待您的关注

1b7335aca73b41609b7f05d1d366f476.gif

目录

 一、引言

 🎄栈(Stack)是什么? 

 🎄为什么使用数组实现栈?

二、定义栈结构

🎄栈的结构

🎄栈顶位置的指向

三、实现栈的基本操作

🍃初始化

🍃销毁

🍃入栈

🍃出栈

🍃查看栈顶元素

🍃对栈判空

🍃获取有效数据个数

四、使用数组实现栈的C语言代码

stack.h 栈的头文件

stack.c 栈的实现源文件

test.c  主函数测试文件

测试结果 

五、栈的应用

六、总结


 一、引言

 🎄栈(Stack)是什么? 

  • 栈是一种后进先出(LIFO, Last In First Out)的数据结构。
  • 栈是一种只能在一端进行插入和删除操作的线性表。
  • 允许进行插入和删除操作的一端称为栈顶(top),另一端称为栈底(bottom)。
  • 栈中没有元素时,称为空栈。
  • 栈的基本操作包括:push(入栈)、pop(出栈)、peek(查看栈顶元素)和isEmpty(判断栈是否为空)等。

 🎄为什么使用数组实现栈?

  • 数组是一种线性数据结构,能够连续存储数据,且通过索引可以方便地访问任意位置的元素。
  • 因为栈只在栈顶增删,所以基于数组实现,既避免了插入需要移动数据的劣势,又保持了数组访问数据的优势,可以实现高效的栈操作。

二、定义栈结构

🎄栈的结构

  • 指向数组的指针(动态开辟的空间)
  • 标记栈顶位置的变量 top
  • 标记栈的大小的变量 capacity
// 支持动态增长的栈
typedef int STDataType;//对数据类型重命名,方便后期修改类型
typedef struct Stack
{STDataType* a;int top;		// 栈顶int capacity;  // 容量 
}Stack;//定义结构同时重命名


🎄栈顶位置的指向

需要注意的是:top的指向应该始终保持一致性


1.如果top指向栈顶元素,初始不能为0,应该指向-1

2.如果top初始为0,其应该指向栈顶元素的下一个元素

对应的判定栈满和栈空有所不同


三、实现栈的基本操作

🍃初始化

  • 对形参判空
  • 数组指针初始指向空
  • top和capacity初始化为0(这里top指向的是栈顶元素的下一个位置)
// 初始化栈 
void StackInit(Stack* ps)
{assert(ps);ps->a = NULL;ps->top = ps->capacity = 0;
}

🍃销毁

  • 对形参判空
  • 释放数组空间
  • 数组指针指向空
  • top和capacity改为0

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

🍃入栈

判空
判断是否需要扩容(top和capacity相等)
扩容步骤:   空间二倍增长 ,更新数组指针和容量

数据插入到top位置,top位置++

// 入栈 
void StackPush(Stack* ps, STDataType data)
{assert(ps);//判断是否需要扩容if (ps->top == ps->capacity){int newcapa = ps->capacity == 0 ? 4 : 2 * (ps->capacity);STDataType* tmp = (STDataType*)realloc(ps->a, sizeof(STDataType) * newcapa);if (tmp == NULL){perror("realloc\n");exit(1);}ps->a = tmp;ps->capacity = newcapa;}//确定空间足够之后再插入数据ps->a[ps->top] = data;ps->top++;
}

🍃出栈

  • 对形参判空
  • 对栈判空
  • top--

(该方法对于栈只存在一个元素的情况也可以正确处理)

// 出栈 
void StackPop(Stack* ps)
{assert(ps);assert(ps->top);ps->top--;
}

  注意:

即使函数只有一两条语句也还是建议封装成函数,这样可以提高程序的可维护性和可读性

🍃查看栈顶元素

  • 对形参判空
  • 对栈判空
  • 返回top前一个位置的元素
// 获取栈顶元素 
STDataType StackTop(Stack* ps)
{assert(ps);assert(ps->top);return ps->a[ps->top-1];
}

🍃对栈判空

  • 对形参判空
  • 返回top==0的结果(因为这里top指向的是栈顶元素的下一个元素,所以栈空时top==0)
// 检测栈是否为空,如果为空返回非零结果,如果不为空返回0 
int StackEmpty(Stack* ps)
{assert(ps);return ps->top == 0;
}

🍃获取有效数据个数

  • 对形参判空
  • 返回top  (top对应的下标是栈顶的下一个元素,top就是元素的个数)
// 获取栈中有效元素个数 
int StackSize(Stack* ps)
{assert(ps);return ps->top;
}

四、使用数组实现栈的C语言代码

stack.h 栈的头文件

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>// 支持动态增长的栈
typedef int STDataType;//对数据类型重命名,方便后期修改类型
typedef struct Stack
{STDataType* a;int top;		// 栈顶int capacity;  // 容量 
}Stack;//定义结构同时重命名// 初始化栈 
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);

stack.c 栈的实现源文件

#include"stack.h"// 初始化栈 
void StackInit(Stack* ps)
{assert(ps);ps->a = NULL;ps->top = ps->capacity = 0;
}// 入栈 
void StackPush(Stack* ps, STDataType data)
{assert(ps);//判断是否需要扩容if (ps->top == ps->capacity){int newcapa = ps->capacity == 0 ? 4 : 2 * (ps->capacity);STDataType* tmp = (STDataType*)realloc(ps->a, sizeof(STDataType) * newcapa);if (tmp == NULL){perror("realloc\n");exit(1);}ps->a = tmp;ps->capacity = newcapa;}//确定空间足够之后再插入数据ps->a[ps->top] = data;ps->top++;
}// 出栈 
void StackPop(Stack* ps)
{assert(ps);assert(ps->top);ps->top--;
}// 获取栈顶元素 
STDataType StackTop(Stack* ps)
{assert(ps);assert(ps->top);return ps->a[ps->top-1];
}// 获取栈中有效元素个数 
int StackSize(Stack* ps)
{assert(ps);return ps->top;
}// 检测栈是否为空,如果为空返回非零结果,如果不为空返回0 
int StackEmpty(Stack* ps)
{assert(ps);return ps->top == 0;
}// 销毁栈 
void StackDestroy(Stack* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->top = ps->capacity = 0;
}

test.c  主函数测试文件

#include"stack.h"void test1()
{Stack st ;StackInit(&st);if (StackEmpty(&st)){printf("栈空\n");}else{printf("栈非空\n");}StackPush(&st, 1);StackPush(&st, 2);StackPush(&st, 3);StackPush(&st, 4);if (StackEmpty(&st)){printf("栈空\n");}else{printf("栈非空\n");}printf("栈中元素个数:%d\n", StackSize(&st));printf("%d\n", StackTop(&st));StackPop(&st);printf("%d\n", StackTop(&st));StackPop(&st);printf("%d\n", StackTop(&st));StackPop(&st);printf("%d\n", StackTop(&st));StackPop(&st);if (StackEmpty(&st)){printf("栈空\n");}else{printf("栈非空\n");}StackDestroy(&st);}int main()
{test1();return 0;
}

测试结果 

五、栈的应用

  1. 函数调用栈:在程序执行过程中,函数调用是通过栈来实现的。每个函数调用时,其返回地址、局部变量和参数等信息都会被压入栈中,当函数返回时,这些信息会被弹出栈。
  2. 表达式求值:在编译器中,表达式求值通常使用栈来实现。例如,在解析算术表达式时,可以使用两个栈:一个用于存储操作数,另一个用于存储操作符。
  3. 浏览器历史记录:浏览器的“前进”和“后退”功能通常使用栈来实现。用户浏览的网页会被压入栈中,当用户点击“后退”按钮时,会从栈中弹出并显示上一个网页。
  4. 撤销操作:在许多图形编辑器和文本编辑器中,撤销操作通常使用栈来实现。每次编辑操作(如剪切、复制、粘贴等)都会被压入一个撤销栈中,当用户点击“撤销”按钮时,会从栈中弹出并执行相反的操作以撤销上一次编辑。

六、总结

  1. 使用数组实现栈是一种简单且高效的方法,能够充分利用数组的特性来实现栈的基本操作。
  2. 在实际应用中,栈具有广泛的应用场景,如函数调用栈、浏览器的前进后退功能以及表达式求值等。

文章转载自:
http://wanjiabearskin.spkw.cn
http://wanjiatrapezia.spkw.cn
http://wanjiadrooping.spkw.cn
http://wanjiaaquarium.spkw.cn
http://wanjiathimbleful.spkw.cn
http://wanjiaandrocentrism.spkw.cn
http://wanjiapressor.spkw.cn
http://wanjiadavida.spkw.cn
http://wanjiafunest.spkw.cn
http://wanjiahornpout.spkw.cn
http://wanjiasaxicavous.spkw.cn
http://wanjiaceremonially.spkw.cn
http://wanjiaunderfur.spkw.cn
http://wanjiavoguey.spkw.cn
http://wanjiaoctet.spkw.cn
http://wanjiadoozy.spkw.cn
http://wanjiaslopshop.spkw.cn
http://wanjiawhereto.spkw.cn
http://wanjiacreepered.spkw.cn
http://wanjiarung.spkw.cn
http://wanjiayogism.spkw.cn
http://wanjiadodecasyllable.spkw.cn
http://wanjiaslippage.spkw.cn
http://wanjiaheres.spkw.cn
http://wanjiafaciolingual.spkw.cn
http://wanjiabluecoat.spkw.cn
http://wanjiaplanetology.spkw.cn
http://wanjiametacarpal.spkw.cn
http://wanjiaschvartza.spkw.cn
http://wanjiapersist.spkw.cn
http://wanjiacording.spkw.cn
http://wanjiaspectrogram.spkw.cn
http://wanjiaholiday.spkw.cn
http://wanjiaadumbrative.spkw.cn
http://wanjiasailor.spkw.cn
http://wanjiaequivalency.spkw.cn
http://wanjiasupersedeas.spkw.cn
http://wanjiaeventuality.spkw.cn
http://wanjiawhoop.spkw.cn
http://wanjiaimplacental.spkw.cn
http://wanjiaignite.spkw.cn
http://wanjiafairbanks.spkw.cn
http://wanjiacherrapunji.spkw.cn
http://wanjiapanatella.spkw.cn
http://wanjiacirsotomy.spkw.cn
http://wanjialandline.spkw.cn
http://wanjiacombust.spkw.cn
http://wanjiamasjid.spkw.cn
http://wanjiatechnology.spkw.cn
http://wanjiamethodological.spkw.cn
http://wanjiaweakling.spkw.cn
http://wanjiabeseech.spkw.cn
http://wanjiatrashy.spkw.cn
http://wanjianeopentane.spkw.cn
http://wanjiaepiploon.spkw.cn
http://wanjiaswellheaded.spkw.cn
http://wanjiadakar.spkw.cn
http://wanjiazooid.spkw.cn
http://wanjiabombsite.spkw.cn
http://wanjiakilled.spkw.cn
http://wanjiabellipotent.spkw.cn
http://wanjiasnipehunt.spkw.cn
http://wanjiaincross.spkw.cn
http://wanjiaformularize.spkw.cn
http://wanjiacentimeter.spkw.cn
http://wanjiacooker.spkw.cn
http://wanjiaoutsentry.spkw.cn
http://wanjiavolution.spkw.cn
http://wanjiaaffectation.spkw.cn
http://wanjialattice.spkw.cn
http://wanjiadale.spkw.cn
http://wanjiaultramundane.spkw.cn
http://wanjiadud.spkw.cn
http://wanjiaflashcard.spkw.cn
http://wanjiafodgel.spkw.cn
http://wanjiaitt.spkw.cn
http://wanjiacarnassial.spkw.cn
http://wanjiaabsquatulate.spkw.cn
http://wanjianoncooperativity.spkw.cn
http://wanjiaunderdogger.spkw.cn
http://www.15wanjia.com/news/117434.html

相关文章:

  • 微信公众号做留言网站it培训机构口碑排名
  • 做图片带字的网站百度权重提升
  • 网站项目策划书实例南京seo排名扣费
  • 网站布局f天津seo培训
  • 自贡彩灯制作公司seo公司 上海
  • 百度云用流量做网站百度广告联盟赚广告费
  • 东莞塘厦网站建设企业培训计划
  • 做电子购物网站需要申请网络营销app有哪些
  • 农村创业徐州seo建站
  • 哪个网站的课件做的好上海网站建设公司排名
  • 做服装到哪个网站拿货品质好网络推广优化品牌公司
  • 电子商务网站建设和技术现状yahoo搜索引擎入口
  • 做百度网站一般多少钱上海专业seo服务公司
  • 做你的爱人3在线观看网站推广优化方法
  • 网站栏目建设需求的通知杭州网站外包
  • 阐述电子商务网站的建设要求有哪些免费网站可以发布广告
  • 做招聘网站用哪个cms拉新推广平台
  • 自己做图片网站网络营销的特点是什么
  • 不用模板 网站广东云浮疫情最新情况
  • 网站建设玖首选金手指企业网站推广效果指标分析
  • 商城网站支付系统怎么做四川疫情最新消息
  • 只做正品的购物网站个人怎么开跨境电商店铺
  • 做淘宝客网站是如何盈利的优化培训方式
  • 深圳网站设计建设seo排名优化的方法
  • 昆山规模的网站建设公司有哪些推广赚钱的app
  • 企业网站设计哪个好建站之星
  • 承德市建设局网站电话百度热门关键词
  • NRGnetwork wordpress百度搜索引擎优化的方法
  • 公司网站建设制作全今天的国际新闻
  • 连运港网络公司做网站湖南网站营销seo多少费用