线性表之栈(数据结构day05)

什么是栈

     栈,stack,是限定在表的一端进行插入和删除预算的线性表
  通常,将删除与插入的一端称为栈顶,每次退栈(即删除一个元素)的必是最后一个进栈的元素,而第一个进栈的元素必然是最后一个退栈的。即在栈中,元素具有先进后出,后进先出的特点,故把栈也称为先进后出的线性表,LIFO表(Last in first out).

栈的顺序存储结构
  • 栈的顺序存储也称为顺序栈,是分配一段连续的空间。类似于顺序表的定义,顺序栈也可以通过数组实现。因为栈底是不变的,可以把栈底设为数组的最低端,即下标为0的位置。因为栈顶位置是随着进栈、退栈而动态变化的,故可以设置一个整形变量top标识当前栈顶的位置,通常称top为栈顶指针。
  • 置空栈:top=-1,因为此时栈中无元素,不指向第一个;
  • 判断栈是否为空:top=-1;
  • 判断栈是否为满:top+1=(size)栈的深度;
  • 进栈:栈不满 !!! S[++top]=元素;
  • 出栈:栈不为空 !!! returnS[top–];
  • 取出栈顶: 栈不为空 !!! returnS[stop]
栈的链式存储结构及基本操作
  • 链栈的每个节点的地址是不连续的,只需要一个栈顶指针head即可。将head改为top.链表的头插法就是典型的链栈。由此可知链栈每个节点都包含一个数据域和一个指针域。
  • 判断栈空:top==null;
  • 进栈:申请新节点,将新节点的指针指向旧栈顶的指针域,将top等于新指针,returnS[top]
  • 退栈:栈不为空 !!! 返回栈顶元素,将栈顶指针指向下一个元素返回给top即可。
  • 取栈顶元素:根据top返回即可

注意:

        不论是链栈还是顺序栈入栈时都必须判断栈是否为满,出栈都必须判断栈是否为空!!!
       不论是链栈还是顺序栈入栈时都必须判断栈是否为满,出栈都必须判断栈是否为空!!!
       不论是链栈还是顺序栈入栈时都必须判断栈是否为满,出栈都必须判断栈是否为空!!!

猜你喜欢

转载自blog.csdn.net/he_zhen_/article/details/86660436