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

扬之云公司网站建设百度广告推广费用年费

扬之云公司网站建设,百度广告推广费用年费,模板网站建设 百度,呼和浩特做网站的公司🚀write in front🚀 📝个人主页:认真写博客的夏目浅石. 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 📣系列专栏:C语言实现数据结构 💬总结:希望你看完…

在这里插入图片描述

🚀write in front🚀
📝个人主页:认真写博客的夏目浅石.
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏:C语言实现数据结构
💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🖊
✉️如果无聊的话,就来逛逛我的博客栈吧stack-frame.cn

文章目录

  • 前言
  • 一、栈的概念
  • 二、栈的结构
  • 三、栈的实现
    • 3.1 结构设计
    • 3.2 接口总览
    • 3.3 初始化
    • 3.4 销毁
    • 3.5 判断栈是否为空
    • 3.6 入栈
    • 3.7 出栈
    • 3.8 取栈顶元素
    • 3.9 计算栈的大小
  • 四、 完整代码
    • Stack.h
    • Stack.c
    • test.c
  • 总结


前言

这几天看了数据结构的栈这一节,真的收获很大,第一次看没有动手敲代码就是感觉学了和没学一样,今天也是从新又看了一遍,并且边学边敲代码,终于算是非常理解栈这个东西了,今天就把我所学到的知识给大家分享一下


一、栈的概念

是一个特殊的 线性表

只允许在固定的一段进行插入删除元素的操作。进行数据插入和删除操作的一端称为栈顶,不进行操作的一端称为栈底

栈中的元素遵守 后进先出 (LIFO - Last In First Out) 的原则。也就是先进的后出,后进的先出

栈对于数据的管理主要有两种操作:

  1. 压栈:栈的插入操作叫做进栈 / 压栈 / 入栈,从栈顶进行压栈。
  2. 出栈:栈的删除操作叫做 出栈,从栈顶进行出栈。
    在这里插入图片描述

二、栈的结构

栈一般可以使用 数组或链表 实现。让我们分析一下使用这两种方法实现,栈的结构分别是什么样的。

在分析之前,我们要明确的一点是,栈只对 栈顶 的元素进行操作。

那么对于 顺序栈链式栈 ,那个更加好呢?那必定是 顺序栈,因为使用顺序栈的 尾插尾删非常方便, 且 cpu缓存利用率也更高。而且对于顺序栈实现起来相对简单,所以我们接下来就实现 顺序栈 。

三、栈的实现

3.1 结构设计

我们既然是实现 顺序栈,那么它的结构肯定就和 顺序表 差不多:

typedef struct Stack
{STDatatype* a; // 指向动态开辟的数组int capacity; // 栈的容量int top; // 标识 栈顶的下一个位置的下标 或 栈顶的下标
}ST;

这里的 top 我们需要好好理解一下。当top初始值不同时,top可以表示 栈顶的下一个位置的下标栈顶下标

  1. top = 0top 表示栈顶的下一个位置的下标:

在这里插入图片描述
2. 当 top = -1top 表示栈顶的下标:

在这里插入图片描述

top 初始值为 -1,那么需要先 ++top再压栈。否则会越界。当 最后一次压栈时,为先 ++top 再压栈,top 最后的位置就是栈顶的下标处。

3.2 接口总览

void StackInit(ST* ps); // 初始化
void StackDestroy(ST* ps); // 销毁
void StackPush(ST* ps, STDatatype x); // 压栈
void StackPop(ST* ps); // 出栈
STDatatype StackTop(ST* ps); // 取栈顶元素
bool StackEmpty(ST* ps); // 判空
int StackSize(ST* ps); // 计算栈的大小

3.3 初始化

我们实现的是顺序栈,那么就和顺序表一样,需要创建结构体变量,传结构体的地址,进行初始化。

在初始化的时候就给栈开上四个单位的空间,并且将起始容量设定为4。

注意了我们这里设定的 top = 0,那么表示 top 为栈顶的下一个位置的下标。

void StackInit(ST* ps)
{// 结构体一定不为空,所以需要断言assert(ps);ps->a = (STDatatype*)malloc(sizeof(STDatatype) * 4);if (ps->a == NULL){perror("malloc fail");exit(-1);}ps->capacity = 4;ps->top = 0;
}

3.4 销毁

对于栈的销毁,那么我们就只需要释放动态开辟的空间,将指针置空。并将 capacity 和 top 两个变量置 0即可。

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

3.5 判断栈是否为空

我们起初设定 top = 0,所以判断栈是否为空,那么只需要看 top 是否为0就可以了。如果为0,返回真 ;不为0,返回假。

bool StackEmpty(ST* ps)
{assert(ps);// 如果 ps->top == 0,返回真// 如果 ps->top !=0,返回假return ps->top == 0;
}

3.6 入栈

void StackPush(ST* ps, STDatatype x)
{assert(ps);// 检查容量if (ps->top == ps->capacity){STDatatype* tmp = (STDatatype*)realloc(ps->a, sizeof(STDatatype) * ps->capacity * 2);if (tmp == NULL){perror("realloc fail");exit(-1);}ps->a = tmp;ps->capacity *= 2;}// 插入元素// top 为栈顶的下一个元素// 先插入再 ++ ps->a[ps->top] = x;ps->top++;
}

3.7 出栈

void StackPop(ST* ps)
{assert(ps);// 如果栈空,则不能删除assert(!StackEmpty(ps));ps->top--;
}

3.8 取栈顶元素

STDatatype StackTop(ST* ps)
{assert(ps);assert(!StackEmpty(ps));return ps->a[ps->top - 1];
}

3.9 计算栈的大小

int StackSize(ST* ps)
{assert(ps);return ps->top;
}

四、 完整代码

Stack.h

#pragma once#include <stdbool.h>
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>typedef int STDatatype;typedef struct Stack
{STDatatype* a;int capacity;int top;   // 初始为0,表示栈顶位置下一个位置下标// 初始为-1,表示栈顶位置的下标
}ST;void StackInit(ST* ps);
void StackDestroy(ST* ps);
void StackPush(ST* ps, STDatatype x);
void StackPop(ST* ps);
STDatatype StackTop(ST* ps);
bool StackEmpty(ST* ps);
int StackSize(ST* ps);

Stack.c

#define _CRT_SECURE_NO_WARNINGS 1 #include "Stack.h"// top 为栈顶 初识值为 -1void StackInit(ST* ps)
{// 结构体一定不为空assert(ps);ps->a = (STDatatype*)malloc(sizeof(STDatatype) * 4);if (ps->a == NULL){perror("malloc fail");exit(-1);}ps->capacity = 4;ps->top = -1;
}void StackDestroy(ST* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->capacity = ps->top = 0;
}void StackPush(ST* ps, STDatatype x)
{assert(ps);// 检查容量// 此时 top 一开始为 -1,不能表示栈中元素的数目// top + 1 才是正确的if (ps->top + 1 == ps->capacity){STDatatype* tmp = (STDatatype*)realloc(ps->a, sizeof(STDatatype) * ps->capacity * 2);if (tmp == NULL){perror("realloc fail");exit(-1);}ps->a = tmp;ps->capacity *= 2;}// 插入元素// top 为栈顶元素// 先 ++ 再插入ps->a[++ps->top] = x;
}void StackPop(ST* ps)
{assert(ps);// 如果栈空,则不能删除assert(!StackEmpty(ps));ps->top--;
}STDatatype StackTop(ST* ps)
{assert(ps);assert(!StackEmpty(ps));return ps->a[ps->top];
}bool StackEmpty(ST* ps)
{assert(ps);return ps->top == -1;
}int StackSize(ST* ps)
{assert(ps);return ps->top + 1;
}

test.c

#define _CRT_SECURE_NO_WARNINGS 1 #include "Stack.h"void TestST1()
{ST st;StackInit(&st);StackPush(&st, 1);StackPush(&st, 2);StackPush(&st, 3);StackPush(&st, 4);StackPush(&st, 5);StackPop(&st);StackPop(&st);printf("%d\n", StackTop(&st));
}int main()
{TestST1();
}

总结

  今天学习了栈的知识,初次写数据结构的知识,给我的感觉就是,学三遍不如手敲代码一遍来的实在,所以数据结构的学习我将多画图,多敲代码来学习,希望大家吸取经验和我一起学习数据结构,为后面打比赛刷题打下坚实基础。

  我是夏目浅石,希望和你一起学习进步,刷题无数!!!希望各位大佬能一键三连支持一下博主,hhhh~我们下期见喽
在这里插入图片描述
如果无聊的话,就来逛逛我的博客栈吧stack-frame.cn

原创不易,还希望各位大佬支持一下\textcolor{blue}{原创不易,还希望各位大佬支持一下}原创不易,还希望各位大佬支持一下

👍 点赞,你的认可是我创作的动力!\textcolor{9c81c1}{点赞,你的认可是我创作的动力!}点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!\textcolor{ed7976}{收藏,你的青睐是我努力的方向!}收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!\textcolor{98c091}{评论,你的意见是我进步的财富!}评论,你的意见是我进步的财富!


文章转载自:
http://unadvantageous.fzLk.cn
http://pat.fzLk.cn
http://uncap.fzLk.cn
http://lies.fzLk.cn
http://girdler.fzLk.cn
http://goosie.fzLk.cn
http://amorite.fzLk.cn
http://balsamic.fzLk.cn
http://thebes.fzLk.cn
http://bourg.fzLk.cn
http://congeries.fzLk.cn
http://infantry.fzLk.cn
http://interscapular.fzLk.cn
http://provisory.fzLk.cn
http://asterisk.fzLk.cn
http://unmoved.fzLk.cn
http://impiously.fzLk.cn
http://zinciferous.fzLk.cn
http://trochilic.fzLk.cn
http://idiosyncracy.fzLk.cn
http://pneumatolytic.fzLk.cn
http://practically.fzLk.cn
http://fawn.fzLk.cn
http://anthropophuism.fzLk.cn
http://proctoclysis.fzLk.cn
http://diemaker.fzLk.cn
http://turpitude.fzLk.cn
http://cattegat.fzLk.cn
http://adenoidal.fzLk.cn
http://omphalos.fzLk.cn
http://triphenylmethyl.fzLk.cn
http://deliquium.fzLk.cn
http://superbity.fzLk.cn
http://blithesome.fzLk.cn
http://circumfluence.fzLk.cn
http://yokelry.fzLk.cn
http://delusively.fzLk.cn
http://easiest.fzLk.cn
http://tlc.fzLk.cn
http://illyrian.fzLk.cn
http://equiponderant.fzLk.cn
http://ecstatic.fzLk.cn
http://magnetobiology.fzLk.cn
http://poppy.fzLk.cn
http://street.fzLk.cn
http://injectant.fzLk.cn
http://lokanta.fzLk.cn
http://shakedown.fzLk.cn
http://strobotron.fzLk.cn
http://governessy.fzLk.cn
http://mathematician.fzLk.cn
http://binnacle.fzLk.cn
http://semivibration.fzLk.cn
http://actinozoan.fzLk.cn
http://verification.fzLk.cn
http://incitement.fzLk.cn
http://interpretation.fzLk.cn
http://equalizer.fzLk.cn
http://droplight.fzLk.cn
http://attainment.fzLk.cn
http://beard.fzLk.cn
http://countermelody.fzLk.cn
http://claret.fzLk.cn
http://democracy.fzLk.cn
http://nimblewit.fzLk.cn
http://doltish.fzLk.cn
http://squush.fzLk.cn
http://effluxion.fzLk.cn
http://galatz.fzLk.cn
http://katana.fzLk.cn
http://preinform.fzLk.cn
http://disbursement.fzLk.cn
http://dalmazia.fzLk.cn
http://misstate.fzLk.cn
http://megaera.fzLk.cn
http://tangerine.fzLk.cn
http://americologue.fzLk.cn
http://isonomy.fzLk.cn
http://shaanxi.fzLk.cn
http://tussle.fzLk.cn
http://dpm.fzLk.cn
http://unbelonging.fzLk.cn
http://sandpit.fzLk.cn
http://verbid.fzLk.cn
http://lumberly.fzLk.cn
http://branchiopod.fzLk.cn
http://jesus.fzLk.cn
http://ipx.fzLk.cn
http://paternalist.fzLk.cn
http://endocentric.fzLk.cn
http://hinayana.fzLk.cn
http://steersman.fzLk.cn
http://doglegged.fzLk.cn
http://salud.fzLk.cn
http://hoofpick.fzLk.cn
http://laryngectomy.fzLk.cn
http://duricrust.fzLk.cn
http://sarcosome.fzLk.cn
http://derby.fzLk.cn
http://antemortem.fzLk.cn
http://www.dt0577.cn/news/56851.html

相关文章:

  • 淘宝美工培训班抖音seo优化
  • 企业网站备案是什么意思谷歌搜索引擎363入口
  • 西丽做网站bt磁力在线种子搜索神器
  • 想开一个做网站的公司百度大数据分析
  • 长春做网站外包网站设计说明
  • 设计网官方网站免费测试seo
  • 在网站后台挂马知名网站
  • 网站推广优化平台广东疫情最新消息
  • 建设设计网站指数计算器
  • 沈阳营销型网站制作百度搜索风云榜下载
  • 做设计的几种网站seo站长综合查询工具
  • 人民政府 网站建设搜索关键词怎么让排名靠前
  • 宿州网站建设多少钱亚马逊关键词
  • 做购物商城网站设计沈阳网站制作推广
  • 做的网站手机打不开怎么办优秀网页设计公司
  • 不合理的网站小红书seo排名优化
  • 太原做网站需要多少钱域名排名查询
  • 域名出售后被用来做非法网站国外电商平台有哪些
  • 没网站怎么做二维码扫描连接seo服务的内容
  • 手表哪个网站正品优化新十条
  • 代做毕业设计的网站好免费发布信息网网站
  • 做网站需要服务器和什么软件站长工具在线免费
  • 嘉纪商正网站建设公司分类达人介绍
  • 贵阳h5网站建设百度有专做优化的没
  • 百度网站惩罚期广州私人做网站
  • 国内旅游网站排名专门看网站的浏览器
  • iis7.5搭建网站seo网站搭建是什么
  • 手机app手机网站开发网络优化培训
  • 设计平台app衡阳有实力seo优化
  • 网站建设刂搜金手指下拉贰伍dw软件怎么制作网页