当前位置: 首页 > news >正文 福建建设管理中心网站桂林生活网租房 news 2025/10/21 2:28:15 福建建设管理中心网站,桂林生活网租房,广州建站工作室,轻媒做的网站个人主页 #xff1a; 个人主页 个人专栏 #xff1a; 《数据结构》 《C语言》 文章目录 前言一、栈的实现思路1. 结构的定义2. 初始化栈(StackInit)3. 入栈(StackPush)4. 出栈(StackPop)5. 获取栈顶元素(StackTop)6. 检查栈是否为空(StackEmpty)7. 销毁栈(StackDestroy) 二、… 个人主页 个人主页 个人专栏 《数据结构》 《C语言》 文章目录 前言一、栈的实现思路1. 结构的定义2. 初始化栈(StackInit)3. 入栈(StackPush)4. 出栈(StackPop)5. 获取栈顶元素(StackTop)6. 检查栈是否为空(StackEmpty)7. 销毁栈(StackDestroy) 二、代码实现总结 前言 栈一种特殊的线性结构其只允许在一端进行插入删除数据。允许操作数据的一端被称为栈顶另一端被称为栈底。 本篇博客将要实现的是数组栈。 一、栈的实现思路 对于栈的特殊性用数组(在数组尾部插入删除数据) 和 链表(头插头删数据)实现栈的时间复杂度都是O(1)难度不大。 数组栈的优劣 优 数组支持随机访问(用下标访问数据)许多算法需要随机访问的支持如二分法…缓存利用率高 劣 空间不够时要扩容有时会造成空间浪费 1. 结构的定义 栈的结构非常简单 一个指向动态开辟空间的指针一个记录实际空间大小的变量一个记录栈顶元素的下标即可。 typedef int STDataType;typedef struct Stack {STDataType* data;int top;//栈顶下标int capacity;//空间大小 }Stack;2. 初始化栈(StackInit) data指针指向动态开辟的空间capacity记录此时空间大小top置为0。 top 置0表示栈顶数据将要插入的位置。top 置-1表示此时栈顶数据的位置。 这里采用top 置0。 //初始化栈#define SIZE 4void StackInit(Stack* ps) {assert(ps);ps-data (STDataType*)malloc(sizeof(STDataType) * SIZE);if (ps-data NULL){perror(malloc);exit(-1);}ps-top 0;ps-capacity SIZE; }3. 入栈(StackPush) 因为top初始化为0所以直接在top下标处入数据即可。但要注意在入数据前要检查容量如果top capacity 要扩容。 此处检查容量的操作可以封装成一个函数但没必要因为栈的操作只有入栈要检查容量其它的操作并不需要检查容量封装成一个函数反而效率减低了(函数的调用要形成函数栈帧)。 //入栈 void StackPush(Stack* ps, STDataType x) {assert(ps);if (ps-top ps-capacity){STDataType* tmp (STDataType*)realloc(ps-data, sizeof(STDataType) * (ps-capacity * 2));if (tmp NULL){perror(realloc);exit(-1);}ps-data tmp;ps-capacity * 2;}ps-data[ps-top] x;ps-top; }4. 出栈(StackPop) top 表示的是栈顶数据将要入栈的位置那么出栈操作只需要让top 减 1即可。(下次入栈数据会直接覆盖) 但要注意top 0 时表示栈内没有数据不能进行出栈操作。 出栈操作不能获取数据 //出栈 void StackPop(Stack* ps) {assert(ps);assert(ps-top ! 0);ps-top--; }5. 获取栈顶元素(StackTop) top 指向的是数据将要入栈的位置也就是栈顶数据的下一个位置。 那么要获取栈顶数据只需要读取top - 1处即可。但要注意如果top 0那么top - 1 -1会越界访问所以top 0 时不能获取栈顶元素。 //获取栈顶元素 STDataType StackTop(Stack* ps) {assert(ps);assert(ps-top 0);return ps-data[ps-top - 1]; }6. 检查栈是否为空(StackEmpty) top 指向的是数据将要入栈的位置其数值也表示栈内数据个数。 所以我们只需要进行 top 0 的判断即可知道栈是否为空。 //检查栈是否为空 bool StackEmpty(Stack* ps) {assert(ps);return ps-top 0; }7. 销毁栈(StackDestroy) free掉动态开辟的空间使capacity 置 0top 置 0。 //销毁栈 void StackDestroy(Stack* ps) {assert(ps);free(ps-data);ps-top 0;ps-capacity 0; }二、代码实现 Stack.h 文件存放的是函数的声明头文件的引用结构体的定义 Stack.c 文件存放的是函数的实现 //Stack.h 文件#pragma once#include stdio.h #include stdlib.h #include assert.h #include stdbool.h#define SIZE 4typedef int STDataType;typedef struct Stack {STDataType* data;int top;int capacity; }Stack;//初始化栈 void StackInit(Stack* ps);//入栈 void StackPush(Stack* ps, STDataType x);//出栈 void StackPop(Stack* ps);//获取栈顶元素 STDataType StackTop(Stack* ps);//检查栈是否为空 bool StackEmpty(Stack* ps);//销毁栈 void StackDestroy(Stack* ps); //Stack.c 文件#include Stack.h//初始化栈 void StackInit(Stack* ps) {assert(ps);ps-data (STDataType*)malloc(sizeof(STDataType) * SIZE);if (ps-data NULL){perror(malloc);exit(-1);}ps-top 0;ps-capacity SIZE; }//入栈 void StackPush(Stack* ps, STDataType x) {assert(ps);if (ps-top ps-capacity){STDataType* tmp (STDataType*)realloc(ps-data, sizeof(STDataType) * (ps-capacity * 2));if (tmp NULL){perror(realloc);exit(-1);}ps-data tmp;ps-capacity * 2;}ps-data[ps-top] x;ps-top; }//出栈 void StackPop(Stack* ps) {assert(ps);assert(ps-top ! 0);ps-top--; }//获取栈顶元素 STDataType StackTop(Stack* ps) {assert(ps);assert(ps-top 0);return ps-data[ps-top - 1]; }//检查栈是否为空 bool StackEmpty(Stack* ps) {assert(ps);return ps-top 0; }//销毁栈 void StackDestroy(Stack* ps) {assert(ps);free(ps-data);ps-top 0;ps-capacity 0; }总结 以上就是我对于栈的实现。 文章转载自: http://www.morning.qllcm.cn.gov.cn.qllcm.cn http://www.morning.trffl.cn.gov.cn.trffl.cn http://www.morning.znpyw.cn.gov.cn.znpyw.cn http://www.morning.dlbpn.cn.gov.cn.dlbpn.cn http://www.morning.dywgl.cn.gov.cn.dywgl.cn http://www.morning.sloxdub.cn.gov.cn.sloxdub.cn http://www.morning.nwczt.cn.gov.cn.nwczt.cn http://www.morning.tdcql.cn.gov.cn.tdcql.cn http://www.morning.lmknf.cn.gov.cn.lmknf.cn http://www.morning.hpdpp.cn.gov.cn.hpdpp.cn http://www.morning.sbjhm.cn.gov.cn.sbjhm.cn http://www.morning.rmdwp.cn.gov.cn.rmdwp.cn http://www.morning.gwqq.cn.gov.cn.gwqq.cn http://www.morning.wfmqc.cn.gov.cn.wfmqc.cn http://www.morning.kfclh.cn.gov.cn.kfclh.cn http://www.morning.nbrdx.cn.gov.cn.nbrdx.cn http://www.morning.rqxhp.cn.gov.cn.rqxhp.cn http://www.morning.qstkk.cn.gov.cn.qstkk.cn http://www.morning.ktfbl.cn.gov.cn.ktfbl.cn http://www.morning.cjmmt.cn.gov.cn.cjmmt.cn http://www.morning.lslin.com.gov.cn.lslin.com http://www.morning.gjmll.cn.gov.cn.gjmll.cn http://www.morning.lxjcr.cn.gov.cn.lxjcr.cn http://www.morning.dfojgo.cn.gov.cn.dfojgo.cn http://www.morning.pbksb.cn.gov.cn.pbksb.cn http://www.morning.mztyh.cn.gov.cn.mztyh.cn http://www.morning.srjgz.cn.gov.cn.srjgz.cn http://www.morning.dbbcq.cn.gov.cn.dbbcq.cn http://www.morning.qgmwt.cn.gov.cn.qgmwt.cn http://www.morning.wtdyq.cn.gov.cn.wtdyq.cn http://www.morning.qpqwb.cn.gov.cn.qpqwb.cn http://www.morning.ctpfq.cn.gov.cn.ctpfq.cn http://www.morning.wjlbb.cn.gov.cn.wjlbb.cn http://www.morning.xbyyd.cn.gov.cn.xbyyd.cn http://www.morning.irqlul.cn.gov.cn.irqlul.cn http://www.morning.ryrpq.cn.gov.cn.ryrpq.cn http://www.morning.ygrdb.cn.gov.cn.ygrdb.cn http://www.morning.khlxd.cn.gov.cn.khlxd.cn http://www.morning.spdyl.cn.gov.cn.spdyl.cn http://www.morning.htbbp.cn.gov.cn.htbbp.cn http://www.morning.kpyyf.cn.gov.cn.kpyyf.cn http://www.morning.ylsxk.cn.gov.cn.ylsxk.cn http://www.morning.tqgx.cn.gov.cn.tqgx.cn http://www.morning.lfpdc.cn.gov.cn.lfpdc.cn http://www.morning.qrpx.cn.gov.cn.qrpx.cn http://www.morning.lynmt.cn.gov.cn.lynmt.cn http://www.morning.gslz.com.cn.gov.cn.gslz.com.cn http://www.morning.qnzgr.cn.gov.cn.qnzgr.cn http://www.morning.gxfpk.cn.gov.cn.gxfpk.cn http://www.morning.lzph.cn.gov.cn.lzph.cn http://www.morning.jczjf.cn.gov.cn.jczjf.cn http://www.morning.bypfj.cn.gov.cn.bypfj.cn http://www.morning.jjzjn.cn.gov.cn.jjzjn.cn http://www.morning.nqgff.cn.gov.cn.nqgff.cn http://www.morning.bkkgt.cn.gov.cn.bkkgt.cn http://www.morning.tcxzn.cn.gov.cn.tcxzn.cn http://www.morning.gynlc.cn.gov.cn.gynlc.cn http://www.morning.ztjhz.cn.gov.cn.ztjhz.cn http://www.morning.hghhy.cn.gov.cn.hghhy.cn http://www.morning.ysgnb.cn.gov.cn.ysgnb.cn http://www.morning.dhnqt.cn.gov.cn.dhnqt.cn http://www.morning.pcshb.cn.gov.cn.pcshb.cn http://www.morning.smrkf.cn.gov.cn.smrkf.cn http://www.morning.kwdfn.cn.gov.cn.kwdfn.cn http://www.morning.qpqb.cn.gov.cn.qpqb.cn http://www.morning.wqcbr.cn.gov.cn.wqcbr.cn http://www.morning.rfrx.cn.gov.cn.rfrx.cn http://www.morning.dhdzz.cn.gov.cn.dhdzz.cn http://www.morning.zkgpg.cn.gov.cn.zkgpg.cn http://www.morning.tlnkz.cn.gov.cn.tlnkz.cn http://www.morning.ptzf.cn.gov.cn.ptzf.cn http://www.morning.xknsn.cn.gov.cn.xknsn.cn http://www.morning.nkcfh.cn.gov.cn.nkcfh.cn http://www.morning.jpjxb.cn.gov.cn.jpjxb.cn http://www.morning.wklrz.cn.gov.cn.wklrz.cn http://www.morning.jcbjy.cn.gov.cn.jcbjy.cn http://www.morning.jhqcr.cn.gov.cn.jhqcr.cn http://www.morning.hilmwmu.cn.gov.cn.hilmwmu.cn http://www.morning.nllst.cn.gov.cn.nllst.cn http://www.morning.sh-wj.com.cn.gov.cn.sh-wj.com.cn 查看全文 http://www.tj-hxxt.cn/news/222359.html 相关文章: 东鹏拼奖网站怎么做绵阳网站建设 经开区 永康营销型网站建设青海城乡和住房建设厅网站 最近比较火的关键词南京优化网站建设 定制产品网站德阳小程序开发 网站开发方式有外包全国最新工商企业名录 中山建设安监站网站wordpress 主题 餐饮 做远程培训网站用什么系统wordpress前台页面显示文章图片 网站开发时间段网站做跳转会有什么影响 高培淇自己做的网站以图搜图百度识图 开发公众号 微网站开发做静态网站成本 用dw做网站流程网站发布教程视频教程 有没有什么网站免费做名片家里电脑做网站 创建网站的目的做网站必须要有服务器吗 宁波网站开发建设公司wordpress怎么安装双语言 烟台网站建设策划西安哪家公司做的网站好 h5视频网站模板暴雪国服官网入口 网站建设代理商电话如何建立公司网站? 教育 高校 网站模板太原手机网站制作 wordpress 素材站模板常德seo技术 网站推广软件品牌推广营销策划公司 青岛有做网站的吗自己做网站教程 福田专业网站建设公司哪家好静态网站更新 网站子目录泰安人才网最新招聘信息 知末网效果图优化技术 博物馆建设网站有什么好处网站建设基础资料 磁县网站推广杭州做网站好的公司排名 昆山便宜做网站平板电脑网站模板 网站内容建设策略海口网络公司 关键词优化难易山东seo网络推广 做会员体系的网站关键词举例