堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。
向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
扩展资料:
一、堆的算法思想
不必将值一个个地插入堆中,通过交换形成堆。假设根的左、右子树都已是堆,并且根的元素名为R。这种情况下,有两种可能:
(1) R的值小于或等于其两个子女,此时堆已完成。
(2) R的值大于其某一个或全部两个子女的值,此时R应与两个子女中值较小的一个交换,结果得到一个堆,除非R仍然大于其新子女的一个或全部的两个。这种情况下,我们只需简单地继续这种将R“拉下来”的过程,直至到达某一个层使它小于它的子女,或者它成了叶结点。
二、栈的基本算法
1、进栈(PUSH)算法
①若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②)。
②置TOP=TOP+1(栈指针加1,指向进栈地址)。
③S(TOP)=X,结束(X为新进栈的元素)。
2、退栈(POP)算法
①若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作②)。
②X=S(TOP),(退栈后的元素赋给X)。
③TOP=TOP-1,结束(栈指针减1,指向栈顶)。
参考资料来源:百度百科-堆
参考资料来源:百度百科-栈
C语言中的堆和栈都是一种数据项按序排列的数据结构。
栈就像装数据的桶或箱子
我们先从大家比较熟悉的栈说起吧,它是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取。
这就如同我们要取出放在箱子里面底下的东西(放入的比较早的物体),我们首先要移开压在它上面的物体(放入的比较晚的物体)。
堆像一棵倒过来的树
而堆就不同了,堆是一种经过排序的树形数据结构,每个结点都有一个值。
通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。
由于堆的这个特性,常用来实现优先队列,堆的存取是随意,这就如同我们在图书馆的书架上取书。
虽然书的摆放是有顺序的,但是我们想取任意一本时不必像栈一样,先取出前面所有的书,书架这种机制不同于箱子,我们可以直接取出我们想要的书。
扩展资料:
关于堆和栈区别的比喻
使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。
使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。
参考资料来源:百度百科-堆栈
将堆跟栈放在一起将是因为两者都是存储数据的方式。区别如下:
一、主体不同
1、堆:是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。
2、栈:又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。
二、特点不同
1、堆:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。
2、栈:是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶。
三、作用不同
1、堆:堆是非线性数据结构,相当于一维数组,有两个直接后继。
2、栈:可以用来在函数调用的时候存储断点,做递归时要用到栈。
参考资料来源:百度百科-堆
参考资料来源:百度百科-栈
啥叫堆?啥叫栈
堆(数据结构):堆可以被看成是一棵树,如:堆排序;栈(数据结构):一种先进后出的数据结构。
C语言中的栈和堆是什么?
1、计算机中的内存分为两部分:一部分是栈(stack,也称堆栈),另一部分是堆(heap)。2、 栈,可以看作是一摞卡片,最上面的卡片表示程序的当前作用域,这往往就是当前正在执行的函数。3、堆,一段完全独立于当前函数或者栈帧的内存区。如果一个函数中声明了一些变量,而且希望当这个函数完成时其中...
什么是堆?什么是栈啊?
堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把...
为什么要把堆和栈区分?
1.堆的概念:堆是内存中一部分不连续的区域,由程序员手动分配和释放内存,称为动态内存分配。在堆中分配内存使用的是malloc和free等函数。堆的实现方法:堆的实现方法是由操作系统提供的,操作系统会分配一块内存空间,多个程序共用这块空间,每个进程或线程再在这块空间上动态划分出自己需要的内存。日常...
什么是堆栈
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(...
堆(heap)和栈(Stack)的区别是什么?为什么平时都把堆栈放在一起讲?
1、堆:是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。2、栈:又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。二、特点不同 1、堆:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。2、栈...
请简单通俗易懂的解释一下在Java中什么叫堆 什么叫栈 谢谢
在java中的栈:栈的原理明白了,其实只要是计算机只要是编程语言,什么堆什么栈都是一样的,基本作用也一样。java中可以认为,栈用来存放局部变量的。public void fun(){ int i=0; \/\/i 是一个局部变量,存放在栈里面的 Object obj = new Objec(); \/\/obj 是一个对象应用,同样也是一个局部变量...
什么是栈?什么是堆?
栈(stack)是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈,程序员不能直接地设置栈。堆栈是一种执行“后进先出”算法的数据结构 栈的特点是先进后出,队列的特点是先进先出.栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定...
什么是堆和栈啊?
那么:堆是指由操作系统管理分配、由应用程序请求的内存,具有运行时分配(动态分配)的特点。栈是操作系统维护的上面说的“栈”,不过是特指,通常每个线程分配一个,函数调用时用到的参数和返回地址通常存放在上面(当然也有不这样做的语言,比如老Fortran),也用来存放函数局部变量。也是动态分配。
堆和栈有什么区别
堆是一种经过排序的树形数据结构,每个结点都有一个值,堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。由于堆的这个特性,常用来实现优先队列,堆的存取是随意。栈是后进先出性质的数据结构。此外,栈:在函数调用时,第一个进栈的是主函数中函数调用后的下一条指令(函数...