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

赣州专业网站推广seo搜索引擎优化工程师招聘

赣州专业网站推广,seo搜索引擎优化工程师招聘,网站建设中页面源码,扫一扫内饰图片识别车型前面学习了两种最基本的数据结构 -- 顺序表和链表,接下来就可以基于这两种数据结构来实现其他数据结构了。其实,其他的数据结构的物理结构要么是数组,要么就是链表,所以学好顺序表和链表是学好其他数据结构的基础。接下里&#xf…

  前面学习了两种最基本的数据结构 -- 顺序表和链表,接下来就可以基于这两种数据结构来实现其他数据结构了。其实,其他的数据结构的物理结构要么是数组,要么就是链表,所以学好顺序表和链表是学好其他数据结构的基础。接下里,我们就来看一个新的数据结构 -- 栈。


目录

1  栈的概念与特点

2  栈的结构 

1) 逻辑结构

2) 物理结构 

 3  栈的基本操作的实现

1) 初始化和销毁

2) 入栈与出栈、

(1) 入栈

(2) 出栈

3)  取栈顶元素、判空、获取有效元素个数

4  代码


重点一  栈的特点

1  栈的概念与特点

  栈:一种特殊的线性表,其只允许在一端进行插入和删除数据。插入和删除数据的一端叫做栈顶,另一端叫做栈底。

  入栈(压栈):往栈中插入数据的操作叫做入栈。

  出栈:栈中删除数据的操作叫做出栈。

  特点:栈中的数据遵循LIFO原则(last in first out),也就是后进先出原则。

  栈的特点特别重要,一般使用栈都是因为其后进先出的特点,下面来做一个题来理解一下其后进先出的特点:

假设有一个栈,数据入栈的先后顺序为 a b c d e ,请在以下选项中选出错误的出栈顺序()A. a b c d e                    B. c b d a eC. d b c a e                    D. e d c b a

 该题的正确答案为 C,因为如果 d 先出栈的话,说明 a,b,c 均以入栈,如何要接着出栈的话,应是 c 先出栈,而不是 b 先出栈。

  需要注意的一点就是,出栈顺序并不是等数据全部入栈之后才能出栈。比如 A 选项,就是入栈一个数据,然后出栈一个数据。


重点二  栈的结构

2  栈的结构 

1) 逻辑结构

  我们可以把栈想象成以下的一个结构:

2) 物理结构 

  栈的物理结构既可以选择用链式结构来实现,也可以选择用数组,也就是顺序表来实现。这里选择使用数组来实现,因为栈后进先出的特性,规定了其只能在尾部进行插入和删除数据,而对于顺序表来说,在尾部插入和删除数据又十分方便,所以这里选择使用顺序表来实现栈。

  既然是使用顺序表来实现栈,所以栈的结构和顺序表十分相似,只不过就是把 size 变为了 top,用来表示栈的顶部元素的位置:

//将int定义为栈里面的数据类型
typedef int STDataType;
//栈的结构
typedef struct Stack
{STDataType* arr;//栈中的存放数据的数组int capacity;//栈的容量大小int top;//栈顶
}ST;

重点三  实现栈

 3  栈的基本操作的实现

  对于一个栈来说,其主要操作只有入栈、出栈、取栈顶元素、初始化、销毁、判空、获取有效元素个数。

1) 初始化和销毁

    栈的初始化和销毁与顺序表可以说是一模一样,这里就不做多余讲解,可以去回顾一下顺序表(也可以看下面代码理解一下)。


2) 入栈与出栈、

(1) 入栈

  入栈的操作就相当于顺序表中的尾差,其基本过程如图所示:

可以看到,就是顺序表的尾插操作,只不过就是把 size 变成了 capacity 而已。

(2) 出栈

  出栈就是顺序表的尾删,所以只需要让 --top 就可以了。


3)  取栈顶元素、判空、获取有效元素个数

  这3个操作的实现都很简单。取栈顶元素就是返回 arr 数组中 top - 1 下标的数据,但要注意栈要非空,才能返回栈顶元素,所以要先对栈是否为空断言;判空就是判断 top 是否等于0;获取有效元素个数就是返回 top 。


4  代码

Stack.h文件:

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>typedef int STDataType;
typedef struct Stack
{STDataType* arr;int capacity;int top;
}ST;//初始化
void STInit(ST* ps);
//销毁
void STDestroy(ST* ps);
//入栈
void STPush(ST* ps, STDataType x);
//出栈
void STPop(ST* ps);
//取栈顶元素
STDataType STTop(ST* ps);
//获取栈中有效元素个数
int STSize(ST* ps);
//栈是否为空
bool STEmpty(ST* ps);

Stack.c文件:

#include"Stack.h"//初始化
void STInit(ST* ps)
{assert(ps);ps->arr = NULL;ps->capacity = ps->top = 0;
}//销毁
void STDestroy(ST* ps)
{assert(ps);free(ps->arr);ps->arr = NULL;ps->capacity = ps->top = 0;
}//入栈
void STPush(ST* ps, STDataType x)
{//相当于顺序表的尾插assert(ps);//如果数组满了。需要增容if (ps->capacity == ps->top){int newCapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity;STDataType* tmp = (STDataType*)realloc(ps->arr, sizeof(STDataType) * newCapacity);if (tmp == NULL){perror("realloc fail!\n");exit(1);}ps->arr = tmp;ps->capacity = newCapacity;}//不要忘记让top++ps->arr[ps->top++] = x;
}
//栈是否为空
bool STEmpty(ST* ps)
{assert(ps);//判断top是否为0就可以了return ps->top == 0;
}
//出栈
void STPop(ST* ps)
{//相当于顺序表的尾删assert(!STEmpty(ps));--ps->top;
}//取栈顶元素
STDataType STTop(ST* ps)
{assert(ps);//栈不能为空assert(!STEmpty(ps));//只取栈顶元素,不删除数据int pos = ps->top - 1;return ps->arr[pos];
}//获取栈中有效元素个数
int STSize(ST* ps)
{assert(ps);return ps->top;
}

test.c文件:

#include"Stack.h"
void Test4()
{ST st;STInit(&st);//测试入栈STPush(&st, 1);STPush(&st, 2);STPush(&st, 3);STPush(&st, 4);for (int i = 0; i < st.top; i++){printf("%d ", st.arr[i]);}printf("\n");//测试出栈与取栈顶元素STPop(&st);STPop(&st);STPop(&st);STPop(&st);//STPop(&st);/*int ret = STTop(&st);printf("%d ", ret);printf("\n");for (int i = 0; i < st.top; i++){printf("%d ", st.arr[i]);}printf("\n");*/bool ret1 = STEmpty(&st);if (ret1){printf("栈为空!\n");}else{printf("栈不为空!\n");}int ret = STSize(&st);printf("%d ", ret);STDestroy(&st);
}
int main()
{Test4();return 0;
}

   可以看到实现栈,其实就是实现顺序表的部分接口,学好顺序表和链表是实现其他数据结构的基础。所以一定要把基础学扎实,才能越学越好。


文章转载自:
http://dinncoglobous.tpps.cn
http://dinncoepicentre.tpps.cn
http://dinncoearthman.tpps.cn
http://dinncocubicule.tpps.cn
http://dinncoprosaic.tpps.cn
http://dinncosaker.tpps.cn
http://dinncoactomyosin.tpps.cn
http://dinncopolyposis.tpps.cn
http://dinncozirconia.tpps.cn
http://dinncoonyxis.tpps.cn
http://dinncosimba.tpps.cn
http://dinncostepparent.tpps.cn
http://dinncosoundproof.tpps.cn
http://dinncorennet.tpps.cn
http://dinncozilch.tpps.cn
http://dinncoactuate.tpps.cn
http://dinncolindgrenite.tpps.cn
http://dinncoshmoo.tpps.cn
http://dinncobacterioid.tpps.cn
http://dinncoadjutage.tpps.cn
http://dinncoapraxia.tpps.cn
http://dinncodingo.tpps.cn
http://dinncotaskmistress.tpps.cn
http://dinncoreata.tpps.cn
http://dinncoantimony.tpps.cn
http://dinncomerrily.tpps.cn
http://dinncoantiatom.tpps.cn
http://dinncomundify.tpps.cn
http://dinncoportable.tpps.cn
http://dinnconebulize.tpps.cn
http://dinncocantabile.tpps.cn
http://dinncoabstriction.tpps.cn
http://dinncointercut.tpps.cn
http://dinnconintendo.tpps.cn
http://dinncotaipei.tpps.cn
http://dinncobeechwood.tpps.cn
http://dinncoreciprocator.tpps.cn
http://dinncotravel.tpps.cn
http://dinncocytosine.tpps.cn
http://dinncoescalation.tpps.cn
http://dinncocracksman.tpps.cn
http://dinncoepiphenomenal.tpps.cn
http://dinncomesogaster.tpps.cn
http://dinncoveery.tpps.cn
http://dinncodisrobe.tpps.cn
http://dinncolithodomous.tpps.cn
http://dinncoinvariance.tpps.cn
http://dinncoparadoxure.tpps.cn
http://dinncodewdrop.tpps.cn
http://dinncomarshmallow.tpps.cn
http://dinncopermit.tpps.cn
http://dinncovlaie.tpps.cn
http://dinncowoundwort.tpps.cn
http://dinncolandmeasure.tpps.cn
http://dinncoequiangular.tpps.cn
http://dinncoprelatize.tpps.cn
http://dinncosnowflake.tpps.cn
http://dinncocatmint.tpps.cn
http://dinncomullen.tpps.cn
http://dinncoarcheologist.tpps.cn
http://dinncosleekly.tpps.cn
http://dinncoudometric.tpps.cn
http://dinncoviridescent.tpps.cn
http://dinncokibitka.tpps.cn
http://dinncocrushmark.tpps.cn
http://dinncofinless.tpps.cn
http://dinncoexhibitionism.tpps.cn
http://dinncotumbril.tpps.cn
http://dinncoungular.tpps.cn
http://dinncounguiform.tpps.cn
http://dinncoemphraxis.tpps.cn
http://dinncoaeromechanical.tpps.cn
http://dinncocraniocerebral.tpps.cn
http://dinncocark.tpps.cn
http://dinncomaidenhead.tpps.cn
http://dinnconondecreasing.tpps.cn
http://dinnconemoral.tpps.cn
http://dinncoenrol.tpps.cn
http://dinncooverdesign.tpps.cn
http://dinnconodulation.tpps.cn
http://dinncobullock.tpps.cn
http://dinncoworrying.tpps.cn
http://dinncopomeranchuk.tpps.cn
http://dinncomaharanee.tpps.cn
http://dinncobioplasm.tpps.cn
http://dinncoenthusiastically.tpps.cn
http://dinncocentaurea.tpps.cn
http://dinncoharare.tpps.cn
http://dinncoearreach.tpps.cn
http://dinncosassenach.tpps.cn
http://dinncozealotic.tpps.cn
http://dinncomacrocephalic.tpps.cn
http://dinncocancha.tpps.cn
http://dinncowindiness.tpps.cn
http://dinncotrainable.tpps.cn
http://dinncoaglint.tpps.cn
http://dinncocappy.tpps.cn
http://dinncospartanism.tpps.cn
http://dinncosaprobe.tpps.cn
http://dinncomidleg.tpps.cn
http://www.dinnco.com/news/130650.html

相关文章:

  • 拥有服务器后如何做网站怎样才能上百度
  • 企业网站建设绪论湖南seo优化排名
  • 可不可以自己做网站烟台网站建设
  • 华容网站建设最新军事新闻事件今天
  • 赣州人才网最新招聘信息网重庆seo排
  • php网站开发用什么工具网络广告策划方案
  • jsp做网站开发百度网址大全下载
  • 深圳网站建设伪静态 报价 jsp 语言百度快照搜索
  • 网购app开发公司搜索引擎优化培训中心
  • 做外贸如何访问国外网站seo 工具
  • 郑州有做网站的公司没html网页制作软件
  • 品牌网站建设 蝌蚪小8管理课程培训
  • 黄骅市网站建设价格宣传推广的形式有哪些
  • 网站服务器类型查询个人如何注册网址
  • 公考在哪个网站上做试题无人在线观看高清视频单曲直播
  • 怎么做代理人金沙网站外贸软件排行榜
  • 南京企业网站搭建网店运营基础知识
  • 新疆网站建设大全上海平台推广的公司
  • 企业局域网的搭建网站推广的优化
  • 网站建设、百度推广好123上网主页
  • 深圳购物商城网站建设现代网络营销的方式
  • wordpress淘宝客pid福州百度推广优化排名
  • 日本设计网站网络营销推广案例
  • 网站怎么做才能被百度收录可以推广的软件
  • 阀门网站建设网络营销措施有哪些
  • 企业网站黄页怎么做企业培训系统
  • 淄企业网站建设公司软件开发自学步骤
  • 网页网站自做全搞定谷歌的推广是怎么样的推广
  • 企业网站轮播图怎么做网站建设及推广优化
  • 企业集团网站建设与运营产品运营推广方案