【C#】堆、栈和堆栈的区别
导读:今天看视频,就看到了堆、栈这一块了。记得当年初相见(VB视频),劈头盖脸一阵蒙,什么都不知道,那时候师傅叫我挂起来,说我随着学习的进度,慢慢的就会懂了。现在,学到了这里,想着自己对自己从前的问题进行解答。可能解答的不够完整不够好,等到我又学了新东西,又有了想法的时候,再回头更改。嘿嘿,先看看当年的问题哈。
一:基本定义
堆(heap):堆是一种经过排序的树形数据结构,每个结点都有一个值。
栈(stack):它是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取。(PS:颇有砌墙的砖——后来者居上的赶脚。)
堆栈:由堆和栈的概念,可以清晰的知道:堆栈,是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。
PS:结合查阅的资料,通常所说的堆栈,实际上更偏向于指栈。
二、基本对比
1,申请方式
heap:程序员自己申请,并指明大小。
stack:由系统分配。
2,申请效率
heap:效率较高,速度较快,但程序员无法对其进行控制。
stack:由new分配的内存,相对效率和速度都较低,且容易产生碎片,但由于是程序员自己申请操作,灵活性强,使用方便。
3,存储的数据类型
stack:存储值类型,即存储固定长度的数据。比如:整数、字符、结构、布尔、枚举等。每个程序在执行时都有自己的堆栈,其他程序不能访问该堆栈。
heap:存储引用类型。比如:类、接口、数组等。
PS:在网上搜索的资料还有很多,但结合视频,目前自己理解的就只有这些咯。
三、相关名词
1,压栈(进栈、入栈):用push表示,就是把数据放入栈中,从栈顶放入,有先进后出的特点!
2,清栈:清空栈中所有的数据。
3,出栈:用POP表示,它是和压栈相反的概念,即把数据从栈中取出来。出栈时从栈顶取出。
形象化解释:有二层楼,拿着砖头,继续往上盖楼,就是压栈。取下砖头拆楼,硬生生把楼房给弄成平房,就是出栈。然后,要是看这座楼不顺眼,直接来包***炸了,灰都不剩那种,就叫清栈。
注意问题:压栈:需要考虑是否满栈,比如一座楼根据地基的承受能力,目前高度达到了极限,那么,就不能往上继续盖。
清栈:需要考虑栈是否为空,空栈,不需要清栈。
出栈:每次出栈都只能出顶栈。(PS:我在想出栈是不是得留下点东西,要是什么都不留,岂不成了清栈了)
4,堆栈溢出:就是不顾堆栈中分配的局部数据块大小,向该数据块写入了过多的数据,导致数据越界,结果覆盖了旧的堆栈数据。 (PS:有点像数组的下标越界问题)
四、个人感受
总算是对以前VB中的遗留问题,做了一丢丢的解答了,虽然还不够全面,但目前很满足了。才发现,有的问题真的可以挂起来,随着学习的深入,自己就会慢慢的了解。如果当时我就去纠结这么一个问题,我肯定会耽误很长时间。其实,说到底,还是自己的知识积累不够。
调侃的说:突然有点佩服我的记忆力了(老师不要说我哈,我知道记是记不住的,可是,我这回就是记住了)。真的,我一看视频中出现的这个堆和栈的名词,顿时就想到了我去年在今目标上发的问题更新协商,嘿嘿!因此,也就多留意了一下,查了很多资料,知道了很多扩展性的东西,这回,又把看不懂的挂起来了,神呀,我什么时候才能都懂了哦,赐予我力量吧,阿门。
在回头看这个堆栈问题的时候,我也顺便看了一下当时提出的别的一些问题,比如类的实例化个数问题、布尔型定义的问题、线程缓冲池(单线程、公寓式线程)、面向对象的继承多态等问题。还记得当时师傅说:有些东西,它就是那样的,没有为什么。学到现在,真的就是那样,没有多余的为什么 ,他就是老师说的王八的屁股。继续努力,觉得自己挺差劲的,那时候提出的一些问题,到现在,也都还剩了一大堆没能解决掉,加油,总会有抛开问题全明白的一天。
请大家多多指教,谢谢!
【C#】堆、栈和堆栈的区别的更多相关文章
- java堆、栈、堆栈的区别
1.栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取速度比堆要快,仅次于直接位于CP ...
- Java中的堆和栈以及堆栈的区别
在正式内容开始之前要说明一点,我们经常所说的堆栈堆栈是堆和栈统称,堆是堆,栈是栈,合在一起统称堆栈: 1.栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Jav ...
- 【校招面试 之 C/C++】第14题 C++ 内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区(堆栈的区别)
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区.里面的变量通常是局部变量.函数参数等.在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用.和堆一样 ...
- 什么是“堆”,"栈","堆栈","队列",它们的区别?
堆:什么是堆?又该怎么理解呢? ①堆通常是一个可以被看做一棵树的数组对象.堆总是满足下列性质: ·堆中某个节点的值总是不大于或不小于其父节点的值: ·堆总是一棵完全二叉树. 将根节点最大的堆叫做最大堆 ...
- 堆”,"栈","堆栈","队列"以及它们的区别
如果你学过数据结构,就一定会遇到“堆”,"栈","堆栈","队列",而最关键的是这些到底是什么意思?最关键的是即使你去面试,这些都还会问到, ...
- java中堆和堆栈的区别
java中堆和堆栈的区别(一) 1.栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取 ...
- c++中关于堆和堆栈的区别
在C++中,内存分成5个区,他们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量 的存储区.里面的变量通常是局部 ...
- 转:C/C++内存管理详解 堆 栈
http://chenqx.github.io/2014/09/25/Cpp-Memory-Management/ 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了 ...
- 堆&栈的理解(转)
(摘自:http://www.cnblogs.com/likwo/archive/2010/12/20/1911026.html) C++中堆和栈的理解 内存分配方面: 堆: 操作系统有一个记录空闲内 ...
随机推荐
- echarts 添加Loading 等待。
capturedsDetailsEcharts: function(id) { if (!id) { id = mini.get("chnNameCaptureds").getVa ...
- 基于Python的Web应用开发实战——3 模板
要想开发出易于维护的程序,关键在于编写形式简洁且结构良好的代码. 当目前为止,你看到的示例都太简单,无法说明这一点,但Flask视图函数的两个完全独立的作用却被融合在了一起,这就产生了一个问题. 视图 ...
- python基础一 day10(1)
要背的:
- C++11:移动构造函数的测试
C++11:移动构造函数的测试 代码如下: #include <iostream> #include <stddef.h> #include <Windows.h> ...
- 后台返回平铺数据,如何转换成树形json并渲染树形结构,ant tree 异步加载
如何后台返回对象数组(平铺式) 1.根据字段标识(板块)获取根节点 ### initTreeData(dataOrg){ var resultArr=dataOrg[0] var secArr=[]; ...
- h5快速制作工具-企业级. 非个人无水印
Epub360 Epub是团队引入的专业级H5应用开发工具,能够快速制作出高质量的H5运营交互页面,具有动画控制.交互设定.社交应用和数据应用的特点,其制作过程就类似于制作一个PPT,比较容易上手. ...
- C# 读App.config配置文件[2]: .Net Core框架
C# 读App.config配置文件[1]:.Net Framework框架 C# 读App.config配置文件[2]: .Net Core框架 网上都是.net framework读取配置文件的方 ...
- 628. Maximum Product of Three Numbers@python
Given an integer array, find three numbers whose product is maximum and output the maximum product. ...
- js截屏
<html><head> <meta name="layout" content="main"> <meta http ...
- APIO2019&&THUSC2019游记
APIO2019懵十三记: day0: 早上和ljx从沈阳出发,下午一点到的首师大附. 由于工作人员中午十二点就散了,我们就先去试机了. 下午三点接到狗牌和T恤,晚上买麦当劳回如意吃. 晚上还有场模拟 ...