数据结构(Java)-第3章剖析.pptVIP

  • 3
  • 0
  • 约4.51千字
  • 约 35页
  • 2017-06-07 发布于湖北
  • 举报
数据结构(Java)-第3章剖析

NEXT Neusoft 基本内容 1.栈的定义和运算 第3章 栈(Stack)和队列 (Queue) 2.栈的存储和实现 3.队列的定义和运算?? 4.队列的顺序存储结构 5.队列的链式存储结构? 6.栈和队列的项目实践 ? 1、栈的定义 栈(Stack)是一种特殊的线性表,它限定其中的元素只允许在线性表的一端进行插入和删除操作。允许操作的一端称为栈顶(top),不允许操作的另一端称为栈底(bottom)。 一.栈的定义和运算 2、栈的运算 栈的基本运算主要有以下几种: (1)创建栈:initiate(s) 初始条件:栈不存在 操作结果:构造一个空栈s (2)判栈空:isEmpty() 初始条件:栈已存在 操作结果:若栈为空栈,返回true,否则返回false。 (3)判栈满:isFull() 初始条件:栈已存在 操作结果:若栈为满栈,返回true,否则返回false。 (4)进栈:push(x) 初始条件:栈已存在且未满 操作结果:插入一个新元素x进栈,并使栈顶指针指向它。 (5)出栈:pop() 初始条件:栈已存在且非空 操作结果:删除栈顶元素,并返回其值。 (6)取栈顶元素:peek() 初始条件:栈已存在且非空 操作结果:返回栈顶元素,这一操作并不改变栈的当前状态。 栈的抽象数据类型用Java接口描述如下: /* * 栈接口 */ public interface Stack { boolean isEmpty(); boolean isFull(); boolean push(Object element); Object pop(); Object peek(); } 二、栈的存储和实现 1、顺序栈 采用顺序存储结构实现的栈简称为顺序栈,它利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设栈顶指针top指示栈顶元素的位置。下图演示了从一个空栈开始,在依次执行一系列入栈、出栈操作的过程中,顺序栈中数据元素的变化。 A.进栈操作 进栈操作是在栈顶位置插入一个新元素element,其基本步骤如下: (1)判断待插入的新元素引用是否为null,如果是则算法结束并返回false,表示进栈失败。否则继续执行第(2)步; (2)判顺序栈是否已满,如果是如果是则算法结束并返回false,表示进栈失败。否则继续执行第(3)步; (3)栈顶指针top加1; (4)将新元素element存入top所指向的位置,使其成为新的栈顶元素。进栈成功,算法结束并返回true。 B.出栈操作 出栈操作是将栈顶元素从栈中移去,并返回其值。其基本步骤如下: (1)判顺序栈是否为空,如果是则算法结束并返回null,表示出栈失败。否则继续执行第(2)步; (2)栈顶指针top减1; (3)返回原来的栈顶元素,算法结束。 /* * 顺序栈 */ public class SeqStack implements Stack { final int MAX_STACK=100;//栈的最大容量 private Object value[];//数组value用来存储栈的元素 private int top;//栈顶指针,其值为栈顶元素在数组中的下标 public SeqStack() {//构造顺序栈 value = new Object[MAX_STACK]; top = -1;//初始状态,空栈 } public boolean isEmpty(){//判断顺序栈是否为空 return top==-1; } public boolean isFull(){//判断顺序栈是否已满 return top==MAX_STACK-1; } public boolean push(Object element){//元素element入栈 if(element==null) return false; if(isFull()) return false; top++; value[top]=element; return true; } public Object pop(){//出栈,栈顶指针下移 if(!isEmpty()) return value[top--]; else return null; } public Object peek(){//读取栈顶元素 if(!isEmpty()) return value[top]; else return null; } } 2、链栈 采用链式存储结构实现的栈简称为链栈。链栈的容量

文档评论(0)

1亿VIP精品文档

相关文档