栈与队列.pptVIP

  • 12
  • 0
  • 约1.05万字
  • 约 43页
  • 2017-05-29 发布于上海
  • 举报
栈与队列ppt课件

Tel:0571 QQ;106159278 栈与队列 栈和队列是两种重要的数据结构。从栈与队列的逻辑结构上来说,它们也是线性结构, 与线性表不同的是它们所支持的基本操作是受到限制的,它们是操作受限的线性表,是一种 限定性的数据结构。 栈 栈(stack)又称堆栈,它是运算受限的线性表,其限制是仅允许在表的一端进行插入 和删除操作,不允许在其他任何位置进行插入、查找、删除等操作。表中进行插入、删除操 作的一端称为栈顶(top),栈顶保存的元素称为栈顶元素。相对的,表的另一端称为栈底(bottom)。 当栈中没有数据元素时称为空栈;向一个栈插入元素又称为进栈或入栈;从一个栈中删除元素又称为出栈或退栈。由于栈的插入和删除操作仅在栈顶进行,后进栈的元素必定先出 栈,所以又把堆栈称为后进先出表(Last In First Out,简称 LIFO)。图 4-1 显示了一个堆栈 及数据元素插入和删除的过程。 在图 4-1 中当 ABCD 均已入栈之后,出栈时得到的序列为 DCBA,这就是“后进先出”。 在解决实际问题时,如果碰到了数据的使用具有“后进先出”的特性,就预示着可以使用堆 栈来存储和使用这些数据。 堆栈的基本操作除了进栈、出栈操作外,还有判空、取栈顶元素等操作。下面给出堆栈 的抽象数据类型定义。 ADT Stack { 数据对象:D = {ai | ai∈D0,i=0, 1, 2…n-1,D0为某一数据对象} 数据关系:R = {ai, ai+1 | ai, ai+1∈D,i=0, 1, 2 … n-2} 基本操作: 栈的顺序存储实现 和线性表类似,堆栈也有两种基本的存储结构:顺序存储结构和链式存储结构。 顺序栈是使用顺序存储结构实现的堆栈,即利用一组地址连续的存储单元依次存放堆栈中的数据元素。由于堆栈是一种特殊的线性表,因此在线性表的顺序存储结构的基础上,选 择线性表的一端作为栈顶即可。根据数组操作的特性,选择数组下标大的一端,即线性表顺 序存储的表尾来作为栈顶,此时入栈、出栈等操作可以在Ο(1)时间完成。 由于堆栈的操作都在栈顶完成,因此在顺序栈的实现中需要附设一个指针 top 来动态的指示栈顶元素在数组中的位置。通常 top 可以用栈顶元素所在数组下标来表示,top= -1 时表 示空栈。图 4-1 就可以看成是一个顺序栈。 堆栈在使用过程中所需的最大空间很难估计,因此,一般来说在构造堆栈时不应设定堆 栈的最大容量。一种合理的做法和线性表的实现类似,先为堆栈分配一个基本容量,然后在 实际的使用过程中,当堆栈的空间不够时再倍增存储空间,这个过程所需的时间均摊到每个 数据元素时间为Θ(1),不会影响操作实现的时间复杂度。 Stack 的顺序存储实现 public class StackArray extends Stack { private final int LEN = 8; //数组的默认大小 private Object[] elements; //数据元素数组 private int top; //栈顶指针 public StackArray() { top = -1; elements = new Object[LEN]; } //返回堆栈的大小 public int getSize() { return top+1; } //判断堆栈是否为空 public boolean isEmpty() { return top0; } //数据元素 e 入栈 public void push(Object e) { if (getSize()=elements.length) expandSpace(); elements[++top] = e; } } private void expandSpace(){ Object[] a = new Object[elements.length*2]; for (int i=0; ielements.length; i++) a[i] = elements[i]; elements = a; } //栈顶元素出栈 public Object pop() throws StackEmptyException { if (getSize()1) throw new StackEmptyException(错误,堆栈为空。); Object obj = elements[top]; elements[top--] = null; return obj; } //取栈顶元素 public Object peek() throws StackEmptyException { if (getSize()1) throw new StackEmptyExcep

文档评论(0)

1亿VIP精品文档

相关文档