大一新生必看,自学必看,里昂详解数据结构之堆栈
数据结构之堆栈
有幸掌握浅薄知识,不吝分享,保持独立思考,自主学习,共同进步。另求关注,点赞,评论,感谢!(tips:主页有数据结构全部知识点,以及知识点讲解,建立完善的数据结构知识体)
核心算法思想
堆栈,一种先进后出的线性表。仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
核心算法实现
顺序栈结构描述如下:
typedef struct Stack
{Elemtype *top;Elemtype *base;int stacksize;
}SqStack;
初始化栈:
void IntiStack(sqstack *s)
{s->base = (Elemtype*)malloc(stack_init_size*sizeof(Elemtype));if (!s->base)
exit(0);s->top = s->base; //设置栈为空 s->stacksize = stack_init_size;
}
入栈:
int Push(sqstack* s, Elemtype e)
{if (s->top - s->base >= s->stacksize) //判断是否栈满 {s->base = (Elemtype*)realloc(s->base, (s->stacksize + stack_increment)*sizeof(Elemtype));if (!s->base)exit(0);s->top = s->base + s->stacksize; //重新设置栈顶 s->stacksize += stack_increment; //重新设置栈的大小 }*(s->top) = e;s->top++;return 1;
}
出栈:
void Pop(sqstack* s, Elemtype *e)
{if (s->top == s->base) //如果栈为空 return;*e = *--(s->top);
}
实践出真知,代码案例
编写一个程序,利用栈的先进后出的特点,实现对于输入的任意一个非负十进制整数,打印输出与其等值的二进制数。
案例源码
constexpr auto STACK_INIT_SIZE = 20;
constexpr auto STACKINCREACE = 20;
typedef char Elemtype;
typedef int Status;
typedef struct {Elemtype *top;Elemtype *base;int stacksize;
}SqStack;Status InitStack(SqStack &S);
Status Push(SqStack &S, Elemtype e);
Status Pop(SqStack &s, Elemtype e);
Status StackEmpty(SqStack S);Status InitStack(SqStack &S) {S.base = (Elemtype*)malloc(STACK_INIT_SIZE * sizeof(Elemtype));if (!S.base) { return false; }S.stacksize = STACK_INIT_SIZE;S.top = S.base;return true;
}Status Push(SqStack &S, Elemtype e) {if (S.top - S.base >= S.stacksize) {S.base = (Elemtype*)realloc(S.base, (S.stacksize + STACK_INIT_SIZE) * sizeof(Elemtype));if (!S.base) { return false; }S.top = S.base + S.stacksize;S.stacksize += STACK_INIT_SIZE;}*S.top = e;S.top++;return true;
}Status Pop(SqStack &S, Elemtype *e) {if (S.base == S.top) { return false; }else{*e = *--S.top;return true;}
}Status StackEmpty(SqStack S){if (S.base == S.top) { return true; }return false;
}int main()
{int N;Elemtype e;SqStack stack;InitStack(stack);scanf_s("%d",&N);while (N){Push(stack, N % 2);N = N / 2;}while (!StackEmpty(stack)){Pop(stack,&e);printf("%d",e);}
}
面试常见问题
栈和队列有什么相同和区别?
栈和队列都是一种特殊的线性表,只允许在端点处插入和删除元素,区别在于栈是先进后出,后进先出,队列是先进先出,后进后出。
(tips:下一博讲队列)
大一新生必看,自学必看,里昂详解数据结构之堆栈相关推荐
- 大一新生必看,自学必看,里昂详解数据结构之二叉树
数据结构之二叉树 有幸掌握浅薄知识,不吝分享,保持独立思考,自主学习,共同进步.另求关注,点赞,评论,感谢!(tips:主页有数据结构全部知识点,以及知识点讲解,建立完善的数据结构知识体) 核心算法思 ...
- 大一新生必看,自学必看,里昂详解数据结构之队列
数据结构之队列 有幸掌握浅薄知识,不吝分享,保持独立思考,自主学习,共同进步.另求关注,点赞,评论,感谢!(tips:主页有数据结构全部知识点,以及知识点讲解,建立完善的数据结构知识体) 核心算法思想 ...
- 大一新生必看,自学必看,里昂详解数据结构之图
数据结构之图 有幸掌握浅薄知识,不吝分享,保持独立思考,自主学习,共同进步.另求关注,点赞,评论,感谢!(tips:主页有数据结构全部知识点,以及知识点讲解,建立完善的数据结构知识体) 核心算法思想 ...
- 大一新生必看,自学必看,里昂详解数据结构之链表
数据结构之链表 有幸掌握浅薄知识,不吝分享,保持独立思考,自主学习,共同进步.另求关注,点赞,评论,感谢!(tips:主页有数据结构全部知识点,以及知识点讲解,建立完善的数据结构知识体) 核心算法思想 ...
- 大一新生必看,自学必看,里昂详解数据结构之线性表
数据结构之线性表(顺序表) 有幸掌握浅薄知识,不吝分享,保持独立思考,自主学习,共同进步.另求关注,点赞,评论,感谢!(tips:主页有数据结构全部知识点,以及知识点讲解,建立完善的数据结构知识体) ...
- 大一新生上手题(题目加源代码详解)(每日一题,一题多解)
2019 数列有序! Problem Description 有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序.n从键盘输 ...
- 思科ccna认证工程师必看路由协议IGRP和EIGRP详解
思科ccna认证工程师必看路由协议IGRP和EIGRP详解单单从他们的名字当中,我们就能猜到他们之间有很多的关联. IGRP: 一种内部网关路由协议,它由Cisco公司八十年代中期设计.使用组合用户配 ...
- 一看就懂的CE-NET详解
一看就懂的CE-NET详解 针对问题 u-net及其变体存在限制,连续的pooling和交错的卷积运算会导致一些空间信息的丢失. 文章贡献 提出了一个DAC模块和一个RMP模块来捕获更多的高级特征并保 ...
- 计算机bios设置论文,玩转电脑必看知识——各种BIOS设置详解 的更多相关文章
7.IDE Primary Master UDMA(第一个IDE主控制器下的UDMA模式) 8.IDE Primary Slave UDMA(第一个IDE从控制器下的UDMA模式) 9.IDE Sec ...
最新文章
- [翻译]使用HtmlAgilityPack更好的HTML分析和验证
- 2020年度最佳的23个的机器学习项目(附源代码)
- 飞天技术汇|阿里云推出全新开发者服务,技术赋能开发者
- 兼容及DOM解释差异笔记——待续
- VTK:可视化之KochSnowflake
- 升级Hbase,解决bug问题
- 修改onlyoffice存储为手动存储关闭浏览器时不进行保存
- .NET Core Docker使用初入篇
- 如何完成一次Apache的版本发布
- 案例演示按角色的form认证实现过程
- winform checkedlistbox不显示复选框_据说90%的人都不知道怎么解决这个Word问题
- oracle 查询表里信息_查看ORACLE 数据库及表信息
- Vue后台数据模拟以及抓取线上数据
- .NET中加密和解密的实现方法
- JAVA基础(1/17)-JAVA语言概述
- Confluence 会议记录(Meeting Notes)蓝图
- 海思3516A 运行mp4box工具,移植gpac 0.4.0
- MinDoc安装指南(v0.12)
- android密度计算器,密度计算器
- 如何用PHP写webshell,phpAdmin写webshell的方法
热门文章
- 全球围剿下,苹果还能挺多久?
- Android命令-重点命令-pm/am/content/wm/appops
- 飞腾CPU体系结构(九)
- 快乐共享(By Robinvane Suen)
- SurfaceView和View最本质的区别
- android iphone css,css能判断手机是安卓还是ios吗?
- matlab各次谐波含量,与谐波相关的基本概念
- 解锁商业新模式,神奇AR为IP内容“添把火”
- 网页文字无法复制的解决方法
- 程序员约架事件中,薛非到底是因为不会用Github还是不会写Tokenizer而没有应战?...