堆栈(Stack)是一组相同数据类型的组合,它是运算受限的线性表,其限制所有的操作仅在堆栈顶端进行,具有后进先出(Last In First Out,LIFO)的特性。栈中进行插入、删除操作的一端称为栈顶(top),栈顶保存的元素称为栈顶元素。相对的,栈的另一端称为栈底(bottom)。用来解决递归调用、子程序的调用等的问题。

和线性表类似,堆栈也有两种基本的存储结构:顺序存储结构和链式存储结构。

栈_第1张图片

  • 堆栈的应用

堆栈在计算机领域的应用相当广泛,主要特性是限制了数据插入与删除的位置和方法,属于有序表的应用:

1. 二叉树及森林的遍历运算,例如中序遍历(Inorder)、前序遍历(Preorder)等。

2. 计算机中央处理单元(CPU)的中断处理(Interrupt handling)。

3. 图形的深度优先(DFS)遍历法。

4. 某些所谓堆栈计算机(Stack Computer),采用空地址(zero-address)指令,其指令没有操作数字段,大部分通过弹出(Pop)及推入(Push)两个指令来处理程序。

5. 递归程序的调用及返回:在每次递归之前,须先将下一个指令的地址及变量值保存到堆栈中。当以后递归返回(Return)时,则依次从堆栈顶端取出这些相关值,回到原来执行递归前的状况,再往下执行。

6. 算术式的转换和求值,例如中序法转成后序法。

7.调用字程序及返回处理,例如要执行调用的子程序前,必须先将返回位置(即下一个指令的地址)存储到堆栈中,然后才执行调用子程序的动作,等到子程序执行完毕后,再从堆栈中取出返回地址。

8. 编译错误处理(Compiler Syntax Processing),例如当编辑程序发生错误或警告信息时,会将所在的地址推入堆栈中,才显示出错误相关的信息对照表。

    • 进制转换

进制转换是一种常见的数值计算问题,例如将十进制转换成八进制。实现进制转换的一种简单方法是重复以下两步,直到N等于0。


// mod 为求余运算

X = N mod d

// div 为 整除运算

N = N div d


最后得到一系列余数就是转换后的结果。

你可能感兴趣的:(数据结构)