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

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

堆叠数据结构使用两种基本操作:推入(push)和弹出(pop):

推入:将数据放入堆叠的顶端(阵列形式或串列形式),堆叠顶端top指标加一。

弹出:将顶端数据资料输出(回传),堆叠顶端资料减一。

栈的基本特点:

1,先入后出,后入先出。
2,除头尾节点之外,每个元素有一个前驱,一个后继

wKiom1aPwXCSR2kkAAAbaR3uU2U545.png

取自维基百科

栈的实现可以通过链表和数组

下面通过链表来实现

class mystack
{
	private int size;
	private Linknode top;
	class Linknode  //链表
	{
		int val;
		Linknode next;
		Linknode(int val)
		{
			this.val=val;
			this.next=null;
		}
	}
	mystack()
	{
		size=0;
		top=null;
	}
	public void push (int a)   //推入元素
	{
		Linknode node=new Linknode(a);
		if(isempty())
			top=node;
		else
		{
			node.next=top;
			top=node;
			size++;
		}
	}
	public int pop()  //抛出栈顶元素
	{
		int a=0;
		if(isempty())
			print null;
		a=top.val;
		top=top.next;
		size--;
	}
	public int top()  //查看栈顶元素
	{
		int a=0;
		a=top.val;
		return a;
	}
	public boolean isempty()  //是否为空
	{
		return top==null;
	}
	public int size()  //大小
	{
		return size;
	}
}