广东手机网站制作价格深圳企业网站建设设计公司
2026/5/21 0:34:32 网站建设 项目流程
广东手机网站制作价格,深圳企业网站建设设计公司,网站上地图怎么做的,网站多久需要维护一、栈的定义栈的概念#xff1a;栈#xff1a;栈是一种特殊的线性表#xff0c;只允许在固定的一端进行插入和删除元素操作。。进行数据插入和删除操作的一端称为栈顶#xff0c;另一端称为栈底。栈遵守一个规则#xff1a;先进后出#xff0c;后进先出压栈#xff1a;…一、栈的定义栈的概念栈栈是一种特殊的线性表只允许在固定的一端进行插入和删除元素操作。。进行数据插入和删除操作的一端称为栈顶另一端称为栈底。栈遵守一个规则先进后出后进先出压栈栈的插入操作叫做进栈/压栈/入栈入数据在栈顶。出栈栈的删除操作叫做出栈。出数据也在栈顶。其实栈的结构就和弹夹的结构一样后放入的子弹先打出来后进栈的数据先出栈最先放入的子弹最后打先进栈的数据后出栈。如下是栈的流程图二、栈的结构typedef int Type;//数据类型的重命名 typedef struct ST { Type* arr; //存储空间基址 int top; //栈顶下标 int capacity; //栈的容量 }ST;三、栈的核心功能1、栈的初始化和销毁1.1、栈的初始化栈顶top初始化时可以有两种方法1、top初始化为0指向下一个栈顶元素的存储地址2、top初始化为-1指向的是当前栈顶的位置而此方法top初始化为0因为当top初始化为0时也可以等价为size可以知道栈里面有多少个元素void STInit(ST* ps) { assert(ps); ps-arr NULL; ps-top ps-capacity 0; }1.2、栈的销毁void STdestroy(ST* ps) { assert(ps); free(ps-arr); ps-arr NULL; ps-top ps-capacity 0; }2、入栈和出栈操作2.1、入栈我们在入栈时需要检查空间是否够用如果空间满了就需要进行动态扩容我们入栈之后需要把top让top指向下一个入栈元素的地址void STPush(ST* ps, Type x) { assert(ps); if (ps-top ps-capacity) { int newcapacity ((ps-top 0) ? 4 : 2 * ps-top); Type* tmp (Type*)realloc(ps-arr, sizeof(Type) * newcapacity); if (tmp NULL) { perror(realloc fail); return; } ps-arr tmp; ps-capacity newcapacity; ps-arr[ps-top] x; } else { ps-arr[ps-top] x; } }2.2、出栈出栈就直接使top--因为top指向的是下一个入栈元素的地址所以直接top--当下一个入栈元素入栈之后就会直接覆盖void STPop(ST* ps) { assert(ps); assert(ps-top 0); ps-top--; }3、栈中元素个数、栈顶元素和栈是否为空3.1、栈中元素个数上面提到过当top初始化为0就与size具有相同的效果记录元素的个数所以我们直接返回topint STSize(ST* ps) { return ps-top; }3.2、获取栈顶元素因为top是指向下一个入栈元素的地址所以当我们需要获取当前栈顶数据时需要对top进行-1操作使其指向当前栈顶int STTop(ST* ps) { assert(ps); assert(ps-top 0); return ps-arr[ps-top - 1]; }3.3、判断栈是否为空如果top 0 说明栈里面没有元素返回truetop ! 0 说明栈不为空返回falsebool STEmpty(ST* ps) { assert(ps); return ps-top 0; }四、栈的实现ST.h#pragma once #includestdio.h #includeassert.h #includestring.h #includestdbool.h typedef int Type; typedef struct ST { Type* arr; //存储空间基址 int top; //栈顶下标 int capacity; //栈的容量 }ST; //栈的初始化 void STInit(ST* ps); //栈的销毁 void STdestroy(ST* ps); //入栈 void STPush(ST* ps, Type x); //出栈 void STPop(ST* ps); //获取栈中元素个数 int STSize(ST* ps); //获取栈顶元素 int STTop(ST* ps); //判断栈是否为空 bool STEmpty(ST* ps);ST.c#define _CRT_SECURE_NO_WARNINGS #include ST.h //栈的初始化 void STInit(ST* ps) { assert(ps); ps-arr NULL; ps-top ps-capacity 0; } //栈的销毁 void STdestroy(ST* ps) { assert(ps); free(ps-arr); ps-arr NULL; ps-top ps-capacity 0; } //入栈 void STPush(ST* ps, Type x) { assert(ps); if (ps-top ps-capacity) { int newcapacity ((ps-top 0) ? 4 : 2 * ps-top); Type* tmp (Type*)realloc(ps-arr, sizeof(Type) * newcapacity); if (tmp NULL) { perror(realloc fail); return; } ps-arr tmp; ps-capacity newcapacity; ps-arr[ps-top] x; } else { ps-arr[ps-top] x; } } //出栈 void STPop(ST* ps) { assert(ps); assert(ps-top 0); ps-top--; } //获取栈中元素个数 int STSize(ST* ps) { return ps-top; } //获取栈顶元素 int STTop(ST* ps) { assert(ps); assert(ps-top 0); return ps-arr[ps-top - 1]; } //判断栈是否为空 bool STEmpty(ST* ps) { assert(ps); return ps-top 0; }STtest.c#includeST.h int main() { ST s; STInit(s); STPush(s,1); STPush(s, 2); STPush(s, 3); STPush(s, 4); STPush(s, 5); while (STEmpty(s) ! true) { printf(%d , STTop(s)); STPop(s); } return 0; }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询