- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 栈和队列
数据结构
赵龙文 lwzhao@
1
主要内容
1 栈
1.1、栈的抽象数据类型及其基本操作
1.2、栈的数组存储表示 — 顺序栈
1.3、栈的链表存储表示 — 链式栈
1.4、 栈的应用
2 队列
2.1、队列的抽象数据类型
2.2、队列的数组存储表示 - 顺序队列
2.3、循环队列 (Circular Queue)
2.4、队列的链接存储表示 — 链式队列
2.5、优先级队列 (Priority Queue)
2.6、队列的应用
2
栈和队列
通常称,栈和队列是限定插入和删除只能在表的“端点”进行的线性表。
栈和队列是两种操作受限的线性表,是两种常用的数据类型。
线性表 栈 队列
Insert(i, x) Insert(n, x) Insert(n, x)
0≤i≤n
Delete(i) Delete(n-1) Delete(0)
0≤i≤n-1
3
1、栈(Stack)
定义:
只允许在一端插入和删除的线性表。
概念:
栈顶(top);
栈底(bottom);
入栈(Push);
出栈(Pop);
特点:
后进先出 (LIFO)
可以对输入序列求逆
出栈
Pop
入栈
Push
top
bottom
a0
?
an-2
an-1
?
4
【思考题】:
设有编号为1,2,3,4的四辆列车,顺序进一个栈式结构的站台,具体写出这四辆列车开出车站的所有可能的顺序。
1、2、3、4;
1、2、4、3;
1、3、2、4;
1、3、4、2;
1、4、3、2;
2、1、3、4;
2、1、4、3;
2、3、4、1;
2、3、1、4 ;
2、4、3、1;
3、2、1、4;
3、2、4、1;
3、4、2、1;
4、3、2、1。
5
1.1、栈的抽象数据类型及其基本操作
ADT Stack {
Data: ......
Operator:
栈初始化
入栈Push push( T x );
出栈Pop pop( );
判断栈是否空IsEmpty IsEmpty( );
读取栈顶元素peek peek ( );
置空栈clear clear( );
判断栈是否满IsFull IsFull( );
}
6
栈的抽象数据类型(Java)
//栈接口,描述栈抽象数据类型
public interface IStack{
public void clear();
public boolean isEmpty();
public int length();
public Object peek();
public void push(Object x) throws Exception;
public Object pop();
}
实现此接口的方法有两种:
顺序栈
链栈
7
1.2、栈的数组存储表示 — 顺序栈
DATA:
object stackElem[ ]; //栈元素数组
int top; //栈顶 (int curLen)
int maxSize; //栈最大容量 (int stackElem.length)
top
stackElem
0 1 2 3 4 5 6 7 8 9 maxSize-1
bottom
入栈:stackElem[top++]= x
出栈:return stackElem[--top]
栈空:top= 0
栈满:top=maxSize
入栈? 出栈?
栈空? 栈满? 栈的长度? 栈顶元素?
8
顺序栈的类定义
public class SqStack implements IStack {
private Object[] stackElem; // 栈存储空间
private int top; // 非空栈中始终表示栈顶元素的下一个位置,当栈为空时其值为0
public SqStack(int maxSize) { // 构造一个存储空间容量为maxSize的栈
top = 0; // 初始化top为0
stackElem = new Object[m
原创力文档


文档评论(0)