数据结构-Java语言描述 第三章 栈和队列
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
System.exit(1);
}
栈顶指针top的初始值决
top=-1;
定了后续其他方法的实现
stackArray=(T[])new Object[n];
}
【算法3-2】入栈
public void push(T obj)
{
if(top==stackArray.length-1){
T []p=(T[])new Object [top*2];
(b)元素a2入栈
an … … a2 a1
(c)元素an入栈
an-1 … a2 a1
(d)元素an出栈
a2 a1
(e)元素a3出栈
a1
(f)元素a2出栈
【例3-1】一个栈的输入序列是1、2、3、4、5,若在 入栈的过程中允许出栈,则栈的输出序列4、3、5、1、 2可能实现吗?1、2、3、4、5的输出呢?
型 正序遍历:依次访问栈中每个元素并输出
3.1.2 顺序栈
顺序栈泛型类的定义如下:
public class sequenceStack<T> {
顺序栈中一维数组 的初始长度
final int MaxSize=10;
private T[] stackArray; 存储元素的数组对象
private int top;
public void nextOrder() {
for(int i=top;i>=0;i--) System.out.println(stackArray[i]);
}
【算法3-8】清空栈操作
public void clear() {
top=-1; }
3.1.3 链栈
栈的链接存储结构称为链栈。结点类的定义,同 第二章Node类。
图3.4 链栈的链表示意图
插入与删除仅在栈顶处执行;链式栈的栈顶在 链头。链栈的基本操作如下所示:
图3.5 链栈插入、删除操作示意图
链栈泛型类的实现如下:
public class linkStack<T> {
private Node<T> top; // 栈顶指针 private int length; //存储栈的长度 public linkStack() //构造一个空的栈 {
取栈顶元素top值不变
} return stackArray[top]; }
【算法3-5】判栈空操作
public boolean isEmpty() {
return top==-1; }
【算法3-6】求栈的长度
public int size() {
return top+1; }
【算法3-7】遍历栈
}
【算法3-1】栈的初始化
无参构造方法
public sequenceStack( )
有{ 参构造方法 putbolpic=s-e1q; uenceStack(int n) { stackArray=(T[])new Object[MaxSize]; } if (n<=0) {
System .out.println(“数组...程序运行!");
栈
(先进后出)
栈是限定仅在表尾进行插入和删除操作的线性 表。允许插入,删除的一端称为栈顶(top),另一端称 为栈底(bottom),不含任何数据元素的栈称为空栈。
出栈
进栈
栈顶 (top)
an
栈顶元素
an-1
…
a2
栈底
a1
(bottom)
栈底元 素
元素入栈和出栈过程
a1
(a)元素a1入栈
a2 a1
length=0; top=null; } public void push(T obj) //入栈 { top=new Node<T>(obj,top); length++; }
public T pop() //出栈 {
if(top==null){ System.out.println(“空栈,无法删"); return null;
for(int i=0;i<=top;i++)
p[i]=stackArray[i];
stackArray=p;
}
top++;
stackArray[top]=obj; 如果栈满重新
}
Байду номын сангаас
分配存储空间
【算法3-3】出栈
public T pop()
{
if(top==-1){
System.out.println(“空栈,无法删除元素");
} T x=top.data; top=top.next; length--; return x; }
public T getHead() //取栈顶数据元素 {
if(top==null){ System.out.println(“栈空...!"); return null;
} return top.data; } public int size() //求出栈中数据元素的个数 { return length; }
数据结构
第三章 栈和队列
目录
1 栈(顺序栈和链栈)
2 队列(顺序队列和链队列)
第三章 栈和队列
栈和队列的应用举例 小结
总体要求
•掌握栈的特点、表示和实现; •熟悉栈的典型应用并编程实现 •掌握队列的特点、表示和实现;
3.1 栈
3.1.1 栈的定义及基本运算
走在独木桥上的小 孩和兔子,如果要 返回,只能是先兔 子,后小孩。
【例3-2】一个栈的输入序列为123,若在入栈的过程 中允许出栈,则可能得到的出栈序列是什么?
思考:
B
入栈序列为ABC,
出栈序列有几种?
A
栈的基本操作
初始化:构造一个空的栈 销毁:销毁一个已存在的栈
加 工 插入:在栈顶位置插入一个新元素 型 删除:删除栈顶元素
引 用
获取:取栈顶数据元素 判空:判断当前栈是否为空 求长度:求出栈中数据元素的个数
指示栈顶元素在
public sequenceStack( ) {顺序}栈中的位置
public sequenceStack(int n) { }
public void push(T obj) {
public T pop( ) { }
public T getHead( ) { } ...... //此处省略部分成员方法
return null;
} top--;
出栈后top值要减一
return stackArray[top+1]; 栈顶元素的位置是top+1 }
【算法3-4】取栈顶元素
public T getHead() {
if(top==-1){ System.out.println("空栈,无法删除元素"); return null;