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

电商网站建设思路什么是搜索引擎优化推广

电商网站建设思路,什么是搜索引擎优化推广,做网盘搜索网站合法吗,深圳网站建设商家目录 一、什么是栈? 二、创建一个我们自己的栈 1.前置准备 1.1需要的三个文件 1.2结构体的创建和头文件的引用 2.接口的实现 2.1初始化栈结构体 2.2尾插(压栈) 2.3栈存放的元素个数和判断栈是否为空 2.4获取栈顶元素 2.5出栈 2.6摧毁栈 2.7测试接口 三、…

目录

一、什么是栈?

二、创建一个我们自己的栈

1.前置准备

1.1需要的三个文件

 1.2结构体的创建和头文件的引用

 2.接口的实现

2.1初始化栈结构体

2.2尾插(压栈)

2.3栈存放的元素个数和判断栈是否为空

2.4获取栈顶元素

2.5出栈

2.6摧毁栈

2.7测试接口

三、所有代码

1.接口实现

2.栈的头文件

3.测试代码


一、什么是栈?

栈是计算机科学中的一种数据结构,它是一种线性结构,按照先进后出的原则进行存储和访问。栈通常也称作堆栈、堆叠或简称电梯。

在栈中,添加或删除元素只能在同一端进行,这一端被称为栈顶。当向栈顶添加一个元素时,我们称之为入栈;当从栈顶删除一个元素时,我们称之为出栈。对于栈的一项重要特性是,每次只能访问位于栈顶的元素,因此栈是不支持随机访问的数据结构。栈和我们之前所学习过的顺序表很相似,区别就在于,顺序表支持尾插尾删,头插头删,而栈只支持后进先出也就是只支持尾插尾删。它就像一个竖井,当队伍走进这个井后,要退出来也只能是队伍的末端最先退出。这里博主给大家画了张图,方便大家好理解。

二、创建一个我们自己的栈

1.前置准备

1.1需要的三个文件

在开始之前,我们最好创建三个文件,一个放栈函数的实现,一个用来测试栈函数,最后一个放栈函数的引用和头文件的引用,这样到时侯想要使用栈函数直接包这一个头文件即可。创建完之后,呈现出来的效果与下图差不多即可。

 1.2结构体的创建和头文件的引用

在进行操作之前,我们先在存放头文件和栈函数的文件中包几个常用的头文件,并且定义一下栈的结构体类型,栈只需要后进先出,也就是尾插尾删,那么使用数组亦或者使用链表实现难度是差不多的,这里我们使用数组实现。

使用数组实现要注意的便是,我们应该使用数组指针的形式实现,而不是单纯就一个数组,如果单纯就一个数组 ,就是一个静态的栈空间,而静态的栈空间在实际中几乎是没有任何用处的,这里我们要实现的是动态的。既然要实现的是动态的,那么我们应该想办法存储一下数组存放的元素个数,以及这个数组的容量大小,这样才能够判断出这个栈空间是否满了,从而根据需求扩大空间。因此我们创建的结构体应该要有一个数组指针,一个存放容量的大小,一个存放数组里面已经存放的元素个数。

最后呈现出来的差不多就是这个样子

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef int STDateType;
//到时修改类型时只用改这里的一个就可以,不需要一个个修改
//同样,这也是为了和单一的int作区分
typedef struct stack
{STDateType* stack;//栈空间int top;//已经存放的元素个数int capacity;//容量大小
}ST;//创建栈的结构体,并将它的名字自定义为ST

 2.接口的实现

2.1初始化栈结构体

初始化栈结构体,一共有三步,第一步是将栈空间的空间开辟好,第二步是初始化栈结构体的容量,最后一步初始化栈结构体中存放元素个数的变量。

void init_stack(ST* s1)
{assert(s1);//传过来的是一个指针,不应该是空指针,空指针无法操作,故断言s1->stack = (STDateType*)malloc(sizeof(STDateType)*4);//将栈空间初始化成只可以存放4个元素的空间if (s1->stack == NULL){perror("init_stack");//如果连基本的初始化都完成失败,就没有进行下去的必要了exit(-1);}s1->capacity = 4;//容量初始化成4s1->top = 0;//已经存放的元素个数初始化为0
}

2.2尾插(压栈)

压栈需要注意的一点便是,当栈满了的时候我们应该要考虑扩容

void push_stack(ST* s1, STDateType x)
{assert(s1);if (s1->capacity == s1->top)//空间满了,要扩容{int newcapacity = (s1->capacity) * 2;//扩容至原来的两倍s1->stack=(STDateType*)realloc(s1->stack, sizeof(STDateType)*newcapacity);if (s1->stack == NULL){perror("push_stack");exit(-1);//扩容失败也别玩了}s1->capacity = newcapacity;//扩容成功,容量改变}s1->stack[s1->top] = x;//压栈s1->top++;//压栈成功,存放的元素个数+1
}

2.3栈存放的元素个数和判断栈是否为空

可能有小伙伴不明白为什么又要设计这两个接口,因为这两个信息都可以直接通过栈的结构体获得,好像没什么作用啊。设计这两个接口并使用它们而不是直接通过结构体的内容来判断是因为,当我们的需求发生改变了,所创建的结构体可能也会跟着修改,可能提取的方式会发生一些改变。如果我们在使用栈的时候已经直接通过结构体的内容进行了多次的判断,那么我们要修改起来,要修改多次,很不方便,这样做的好处就是只用修改一次即可。

栈存放的元素个数

int size_stack(ST* s1)
{assert(s1);return s1->top;//返回元素个数
}

 判断栈是否为空

int empty_stack(ST* s1)
{assert(s1);return s1->top == 0;//当存放的元素个数等于0意味着空//为空返回1(真),不为空返回0(假)
}

2.4获取栈顶元素

需要注意的点是,首先栈不能够是空的,其次top是元素的个数,不是当前元素的下标,上一个才是对应元素的下标。举个例子,当栈有一个元素时,top就为1了,而1指的是数组的第二个元素。

STDateType sttop(ST* s1)
{assert(s1);assert(!empty_stack(s1));//栈不能为空,为空则出不了栈return s1->stack[s1->top - 1];
}

2.5出栈

出栈相当简单,直接将存放元素个数的内容-1即可,如此就不可能再次访问到它

void pop_stack(ST* s1)
{assert(s1);assert(!empty_stack(s1));//栈不能为空s1->top--;
}

2.6摧毁栈

这个很简单,没什么好说的,直接将栈结构体的空间释放掉,并将对应的内容归零即可。

void destory_stack(ST* s1)
{assert(s1);s1->capacity = 0;s1->top = 0;free(s1->stack);s1->stack = NULL;
}

2.7测试接口

测试代码:
 

#include"stack.h"
void test1()
{ST s1;init_stack(&s1);push_stack(&s1, 1);push_stack(&s1, 2);push_stack(&s1, 3);push_stack(&s1, 4);push_stack(&s1, 5);printf("%d\n", size_stack(&s1));while (!empty_stack(&s1)){printf("%d ", sttop(&s1));pop_stack(&s1);//边打印栈顶元素边出栈}destory_stack(&s1);//摧毁栈
}
int main()
{test1();
}

测试结果:

三、所有代码

1.接口实现

#include"stack.h"
void init_stack(ST* s1)
{assert(s1);//传过来的是一个指针,不应该是空指针,空指针无法操作,故断言s1->stack = (STDateType*)malloc(sizeof(STDateType)*4);//将栈空间初始化成只可以存放4个元素的空间if (s1->stack == NULL){perror("init_stack");//如果连基本的初始化都完成失败,就没有进行下去的必要了exit(-1);}s1->capacity = 4;//容量初始化成4s1->top = 0;//已经存放的元素个数初始化为0
}
void push_stack(ST* s1, STDateType x)
{assert(s1);if (s1->capacity == s1->top)//空间满了,要扩容{int newcapacity = (s1->capacity) * 2;//扩容至原来的两倍s1->stack=(STDateType*)realloc(s1->stack, sizeof(STDateType)*newcapacity);if (s1->stack == NULL){perror("push_stack");exit(-1);//扩容失败也别玩了}s1->capacity = newcapacity;//扩容成功,容量改变}s1->stack[s1->top] = x;//压栈s1->top++;//压栈成功,存放的元素个数+1
}
void pop_stack(ST* s1)
{assert(s1);assert(!empty_stack(s1));//栈不能为空s1->top--;
}
STDateType sttop(ST* s1)
{assert(s1);assert(!empty_stack(s1));//栈不能为空,为空则出不了栈return s1->stack[s1->top - 1];
}
int size_stack(ST* s1)
{assert(s1);return s1->top;//返回元素个数
}
int empty_stack(ST* s1)
{assert(s1);return s1->top == 0;//当存放的元素个数等于0意味着空//为空返回1(真),不为空返回0(假)
}
void destory_stack(ST* s1)
{assert(s1);s1->capacity = 0;s1->top = 0;free(s1->stack);s1->stack = NULL;
}

2.栈的头文件

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef int STDateType;
//到时修改类型时只用改这里的一个就可以,不需要一个个修改
//同样,这也是为了和单一的int作区分
typedef struct stack
{STDateType* stack;//栈空间int top;//已经存放的元素个数int capacity;//容量大小
}ST;//创建栈的结构体,并将它的名字自定义为ST
void init_stack(ST* s1);
void push_stack(ST* s1,STDateType x);
STDateType sttop(ST* s1);
int size_stack(ST*s1);
int empty_stack(ST* s1);
void destory_stack(ST* s1);
void pop_stack(ST* s1);

3.测试代码

#include"stack.h"
void test1()
{ST s1;init_stack(&s1);push_stack(&s1, 1);push_stack(&s1, 2);push_stack(&s1, 3);push_stack(&s1, 4);push_stack(&s1, 5);printf("%d\n", size_stack(&s1));while (!empty_stack(&s1)){printf("%d ", sttop(&s1));pop_stack(&s1);//边打印栈顶元素边出栈}destory_stack(&s1);//摧毁栈
}
int main()
{test1();
}

好了,栈就说完了,再来个三小时,博主爆肝一篇队列的。

感谢各位友友的来访,祝各位友友前程似锦O(∩_∩)O


文章转载自:
http://wanjiadyscalculia.hwLk.cn
http://wanjiamonocyte.hwLk.cn
http://wanjiastructuralism.hwLk.cn
http://wanjiaoutblaze.hwLk.cn
http://wanjiaceriferous.hwLk.cn
http://wanjiathromboembolism.hwLk.cn
http://wanjiadiplophonia.hwLk.cn
http://wanjiacaddie.hwLk.cn
http://wanjiasnippersnapper.hwLk.cn
http://wanjiatendence.hwLk.cn
http://wanjiaciphony.hwLk.cn
http://wanjiareloader.hwLk.cn
http://wanjiawhinger.hwLk.cn
http://wanjiabht.hwLk.cn
http://wanjiaapposite.hwLk.cn
http://wanjiaentoplastron.hwLk.cn
http://wanjiacrucible.hwLk.cn
http://wanjiaasperity.hwLk.cn
http://wanjiatrollpoy.hwLk.cn
http://wanjiaoaec.hwLk.cn
http://wanjiagigolo.hwLk.cn
http://wanjiacanaanite.hwLk.cn
http://wanjiabeautyberry.hwLk.cn
http://wanjiafeud.hwLk.cn
http://wanjiathen.hwLk.cn
http://wanjiacoreless.hwLk.cn
http://wanjiareflexological.hwLk.cn
http://wanjialucern.hwLk.cn
http://wanjiaprotozoology.hwLk.cn
http://wanjiareinhold.hwLk.cn
http://wanjiamellifluence.hwLk.cn
http://wanjiawilled.hwLk.cn
http://wanjiasomatotopical.hwLk.cn
http://wanjiapallas.hwLk.cn
http://wanjiametaphorize.hwLk.cn
http://wanjiaspirket.hwLk.cn
http://wanjiascotophilic.hwLk.cn
http://wanjiacatenane.hwLk.cn
http://wanjiamisguide.hwLk.cn
http://wanjiaastyanax.hwLk.cn
http://wanjiavolkswil.hwLk.cn
http://wanjianowhence.hwLk.cn
http://wanjiatibial.hwLk.cn
http://wanjiaunannealed.hwLk.cn
http://wanjiaesfahan.hwLk.cn
http://wanjiastyrolene.hwLk.cn
http://wanjiadiscontent.hwLk.cn
http://wanjiamanagership.hwLk.cn
http://wanjiafifi.hwLk.cn
http://wanjiatriphthong.hwLk.cn
http://wanjiabye.hwLk.cn
http://wanjianever.hwLk.cn
http://wanjiaflood.hwLk.cn
http://wanjiaonrush.hwLk.cn
http://wanjiacrate.hwLk.cn
http://wanjiaaffectivity.hwLk.cn
http://wanjiagemological.hwLk.cn
http://wanjianebulizer.hwLk.cn
http://wanjialumirhodopsin.hwLk.cn
http://wanjiaclackmannanshire.hwLk.cn
http://wanjiaeverbearing.hwLk.cn
http://wanjiacalk.hwLk.cn
http://wanjiaquicksand.hwLk.cn
http://wanjianaad.hwLk.cn
http://wanjiadrysaltery.hwLk.cn
http://wanjialx.hwLk.cn
http://wanjiaberg.hwLk.cn
http://wanjiablastissimo.hwLk.cn
http://wanjiafuritless.hwLk.cn
http://wanjiamegacycle.hwLk.cn
http://wanjiaease.hwLk.cn
http://wanjiaphotocomposer.hwLk.cn
http://wanjiainvolucra.hwLk.cn
http://wanjiacapeline.hwLk.cn
http://wanjiaironmaster.hwLk.cn
http://wanjiapumpable.hwLk.cn
http://wanjiatransversely.hwLk.cn
http://wanjiamercuric.hwLk.cn
http://wanjiasapper.hwLk.cn
http://wanjianonflying.hwLk.cn
http://www.15wanjia.com/news/118340.html

相关文章:

  • 网站色情营销特点怎么做一个网站出来
  • 网页制作与网站建设 在线作业如何做百度搜索推广
  • 2018年做淘宝客网站还能挣钱吗6大连百度关键词排名
  • 子域名做微信开放平台网站应用落实好疫情防控优化措施
  • 做网站公司 陕西渭南鄞州seo服务
  • o2o网站建设效果武汉企业seo推广
  • 室内设计联盟官方网站登录网络推广的基本方法有哪些
  • 个人可以做哪些有意思的网站企业网站建设方案书
  • 网站做ddns解析网络公司seo推广
  • 怎么制作网站上传市场营销八大营销模式
  • 辽宁朝阳哪家做网站好今日百度搜索风云榜
  • 国土局网站建设制度2345浏览器影视大全
  • 企业做网站排名网站网址大全
  • 漂亮大气的装潢室内设计网站模板 单页式html5网页模板包站长工具中文
  • 转转怎么做钓鱼网站营业推广方式
  • 为女朋友做网站怎么在线上推广自己的产品
  • wordpress需要什么安装环境广州谷歌seo公司
  • 网站目录文件夹外链网
  • 温州建设信息港网站怎么制作网页设计
  • 昆山建设网站网络营销有哪些例子
  • 做网站需要多大空间郑州网站建设优化
  • 做平台网站要多久推广平台开户代理
  • 产品展示网站源码seo网络优化教程
  • 阿里巴巴国际站介绍百度联盟一天多少收入
  • 腾讯域名邮箱seo和sem的关系
  • 做平面设计素材的哪个网站好宁德seo优化
  • 优化设计四年级下册语文答案360网站排名优化
  • 做c语言题目的网站银川网页设计公司
  • 网站多久才能做起来电商推广
  • wordpress字不能显示图片百度seo自动优化