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

抖音代运营找客户话术简阳seo排名优化课程

抖音代运营找客户话术,简阳seo排名优化课程,cdn wordpress 统计,西安阿里云网站建设目录 栈栈的概念及结构栈的实现数组栈的实现数组栈功能的实现栈的初始化void STInit(ST* pst)初始化情况一初始化情况二 代码栈的插入void STPush(ST* pst, STDataType x)代码 栈的删除void STPop(ST* pst)代码 栈获取数据STDataType STTop(ST* pst)代码 判断栈是否为空bool ST…

目录

    • 栈的概念及结构
    • 栈的实现
      • 数组栈的实现
      • 数组栈功能的实现
        • 栈的初始化void STInit(ST* pst)
          • 初始化情况一
          • 初始化情况二
        • 代码
        • 栈的插入void STPush(ST* pst, STDataType x)
          • 代码
        • 栈的删除void STPop(ST* pst)
          • 代码
        • 栈获取数据STDataType STTop(ST* pst)
          • 代码
        • 判断栈是否为空bool STEmpty(ST* pst)
        • 求栈的元素个数int STSize(ST* pst)
        • 栈的销毁void STDestory(ST* pst)
        • 栈的打印方式
        • 栈溢出问题

栈的概念及结构

栈:一种特殊的线性表(数据是挨着储存,是连续的),其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。

栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。

压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。

出栈:栈的删除操作叫做出栈。出数据也在栈顶。
在这里插入图片描述
在这里插入图片描述

注意栈顶不能叫做头,栈底不能叫做尾

栈的实现

栈分为两种
数组栈:数组通常让首元素的空间为栈底,末尾为栈顶(因为栈的规则是后进先出,数组让末尾为栈顶的尾删效率更高)
在这里插入图片描述

链式栈:
双向链表实现的话栈顶可以是头节点或者尾借点,用头节点当栈顶就是头插或者头删,尾节点当栈顶就是尾插尾删
单链表实现的话通常用头节点当栈顶,尾节点当栈底(因为单链表头插头删的时间复杂度低,而尾插尾删需要遍历一遍链表,时间复杂度高)

在这里插入图片描述

数组栈和链式栈相比,数组栈相对来说更好一点,因为数组栈简单快捷,虽然数组栈有时需要扩容,但是这种情况相对来说比较少,因为一次扩容就是2倍左右(不是规定必须2倍,只是2倍相对来说更合理)
对于两个链式栈相比,单链表会更合适一点,因为双向链表实现起来更复杂一点

数组栈的实现

typedef struct stack
{int* a;int top;//栈顶int capacity;空间
}ST;

数组栈功能的实现

栈的初始化void STInit(ST* pst)

初始化的时对于指针a和capacity,我们很容易就会想到a=NULL,capacity=0

而对于top的初始化就需要注意

初始化情况一

如果top为数组的下标,当top初始化为0时就会出现歧义
当数组为空时,top=0
当数组中有一个元素时,top也为0
为了避免这种情况,我们将top初始化成-1

在这里插入图片描述

在这里插入图片描述

初始化情况二

我们也可以认为top代表数据个数,或者理解成指向栈顶元素的下一个位置
这样top就可以初始化成0

在这里插入图片描述

代码
void STInit(ST* pst)
{assert(pst);pst->a = NULL;pst->capacity = 0;pst->top = 0//或者pst->top = -1;
}

后面的代码我们讨论top初始化为0的情况

栈的插入void STPush(ST* pst, STDataType x)

栈的插入和之前我写的顺序表还有链表方式都差不多,有疑惑的可以去看看我之前写的文章

代码
void STPush(ST* pst, STDataType x)
{assert(pst);if (pst->top == pst->capacity){int newcapacity = pst->capacity == 0 ? 4 : pst->capacity * 2;STDataType* tmp = realloc(pst->a, sizeof(STDataType) * newcapacity);if (tmp == NULL){perror("realloc fail");return;}pst->a = tmp;pst->capacity = newcapacity;}pst->a[pst->top] = x;pst->top++;
}
栈的删除void STPop(ST* pst)

栈的删除要注意不能让top=0,因为top=0后就代表栈没有元素可以删除,所以要断言

代码
void STPop(ST* pst)
{assert(pst);assert(pst->top > 0);pst->top--;
}
栈获取数据STDataType STTop(ST* pst)

因为top初始化为0,所以top为栈顶元素的下一个的下标

代码
STDataType STTop(ST* pst)
{assert(pst);assert(pst->top > 0);return pst->a[pst->top - 1];
}
判断栈是否为空bool STEmpty(ST* pst)
bool STEmpty(ST* pst)
{assert(pst);return pst->top == 0;
}
求栈的元素个数int STSize(ST* pst)
int STSize(ST* pst)
{return pst->top;
}
栈的销毁void STDestory(ST* pst)
void STDestory(ST* pst)
{assert(pst);free(pst->a);pst->a = NULL;pst->top = pst->capacity = 0;
}
栈的打印方式

由于栈遵循后进先出,在访问栈的元素时,我们需要做到访问一个栈的元素就删除一个栈的元素,当栈访问完一遍后,栈的元素就全没了,也就是栈为空

int main()
{ST s;STInit(&s);STPush(&s, 1);STPush(&s, 2);STPush(&s, 3);STPush(&s, 4);STPush(&s, 5);while (!STEmpty(&s)){printf("%d ", STTop(&s));STPop(&s);}printf("\n");return 0;
}
栈溢出问题

栈有两种
数据结构的栈:存储数据

操作系统的栈:内存区域的划分(malloc,realloc…)

栈溢出中的栈是指操作系统的栈,发生的情况一般为递归出现返回条件错误,导致一直调用函数建立函数栈帧

http://www.hrbkazy.com/news/55899.html

相关文章:

  • 网站备案后可以改名吗国内疫情最新消息
  • 手机虚拟空间seo网络优化公司哪家好
  • 网站SEO建设新手如何找cps推广渠道
  • 福建省网站备案用户注销(删除)备案申请表东莞网络优化公司
  • 温州做网站建设深圳市seo上词贵不贵
  • 网站过期后多长时间不续费就完了微信搜一搜seo
  • 自己在公司上班做网站宣传 侵权吗seo优化网站推广全域营销获客公司
  • 长沙网站制作收费明细seo网站推广方式
  • 做如美团式网站要多少钱品牌定位
  • 潍城区建设局网站下载百度app下载
  • 乐陵市人民医院广州优化营商环境条例
  • b2b网站建设怎么做常见的网络直接营销有哪些
  • 小程序建站模板成都搜狗seo
  • 上海热门事件北京seo排名厂家
  • 做外贸哪些b2b网站比较有效客户引流的最快方法是什么
  • 在哪个网站里下载的图片可以做展架seo推广多少钱
  • 云主机购买武汉网站seo公司
  • 如何根据网址攻击网站竞价外包
  • 网站图怎么做才能小而清晰度化妆品软文推广范文
  • 佛山信息技术网站开发可口可乐网络营销案例
  • 电子商务网站设计说明百度关键词怎么做排名
  • 海珠做网站浏览器打开是2345网址导航
  • 南山做网站哪家好网站平台有哪些
  • 网站建设怎么打开肇庆网站建设制作
  • 常见网站安全漏洞公司宣传推广方案
  • 做网站是不是也是暴利关键词检测
  • 网站开发功能清单例表班级优化大师是干什么用的
  • 个人电脑做外网网站网上卖货的平台有哪些
  • 云南汽车网络营销北京网站优化方法
  • WordPress小程序论坛西安seo网络推广