
堆(英语: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语言在执行工作时程序将使用一个运行时堆栈在中国一些老师或一些低劣质量的书,喜欢把栈叫堆栈。其实堆,栈是栈。c语言在执行工作时程序将使用一个运行时堆栈,其实C语言是基于过程的语言,又叫基于函数的语言。而函数的调用过程用栈又非常的合适。所以,伴随程序的运行,函数的调用都默认给一个栈,基本上是一个线程就有一个调用栈。C++,C#,JAVA,都一个道理。
在片内RAM中,常常要指定一个专门的区域来存放某些特别的数据,它遵循顺序存取和后进先出(LIFO/FILO)的原则,这个RAM区叫堆栈。
子程序调用和中断服务时CPU自动将当前PC值压栈保存,返回时自动将PC值d栈;
保护现场/恢复现场;
数据传输。
堆栈段是一个特殊的段,在程序中可以定义它,也可以不定义。除了要生成COM型执行文件的源程序外,一个完整的源程序一般最好定义堆栈段。如果在程序中不定义堆栈段,那么, *** 作系统在装入该执行程序时将自动为其指定一个64K字节的堆栈段,所以你没申明堆栈当然也可以用push。
在程序没有定义堆栈段的情况下,在由连接程序生成执行文件时,将会产生一条如下的警告信息, 但程序员可以不理会它,所生成的执行文件是可以正常运行的。
堆栈段一般是拿来保存局部变量用的,函数调用,中断返回都需要栈的支持。良好的程序员和优美的代码不应该没有堆栈段。
以上就是关于什么是堆什么是栈啊全部的内容,包括:什么是堆什么是栈啊、程序运行时有时会报堆栈损坏.但是可以继续执行,求教、什么是堆栈等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)