在计算机科学中,栈(英语:stack)是一种特殊的串列形式的数据结构,它的特殊之处在于只能允许在链结串列或阵列的一端(称为堆叠顶端指标,英语:top)进行加入数据(英语:push)和输出数据(英语:pop)的运算。另外栈也可以用一维数组或连结串列的形式来完成。堆叠的另外一个相对的操作方式称为伫列。

由于堆叠资料结构只允许在一端进行操作,因而按照后进先出(LIFO, Last In First Out)的原理运作。

在NOIP中,可以通过C++的类“stack”(需要引入“stack”头文件)或者使用数组进行模拟。使用数组进行模拟时需要使用一个int类型的模拟“指针”代表栈顶,常用0(或1)为栈底。