- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构(第四章 栈和队列);现实生活中的一些线性数据结构的事例:
递归问题的解决方法
表达式的计算:如5+(4-3×(5+2))
排队等车的队列
栈和队列的特点:
它们的状态是不断变化的
添加和删除是它们共同的操作
添加和删除在特定的位置(哪些位置???)
考虑:此类数据结构应该对用户提供哪些操作?;栈和队列;可将线性表和栈及队列的插入和删除操作对比如下: ;主要内容;4.1 栈;栈的操作
习惯上将每次删除(也称为退栈)操作又称为出栈或弹出(POP)操作。删除的元素总是当前栈中“最新”的元素(栈顶元素)。
每次插入(称为进栈)操作称为入栈或压入(PUSH)操作,入栈的元素总是当前栈中“最新”的元素。
在空栈中最先插入的元素总被放在栈的底部,只有所有元素被弹出之后它才能被删除。;base;base; ;图4.1 栈(顺序栈)及其状态变化:{A, B, C, D}
{入栈, 入栈, 出栈, 入栈, 入栈, 出栈, 出栈, 出栈} ;栈的数据元素;栈的运算;栈的溢出;栈抽象数据类型ADT,栈接口;总结
栈的运算规则是按后进先出的原则进行的(又称为后进先出),简称为LIFO(last in first out)表。
就线性表而言,实现栈的方法有很多,由于栈也是线性表,因此线性表的存储结构对栈也适用,我们着重介绍顺序栈(arrary-based stack)和链式栈(linked stack) ,它们类似于顺序表和链式表。
这两种存储结构的不同,则使得实现栈的基本运算的算法也有所不同。;栈的表示和实现; 能否使用一个线性表对象作为栈,或将栈声明为继承线性表?入栈调用insert(0,x)函数,出栈调用remove(0)函数?为什么?
【习题解答】都不能。 ;由于栈是运算受限的线性表,因此线性表的存储结构对栈也适应。
栈的顺序存储结构简称为顺序栈(Sequential Stack),它是运算受限的线性表。因此,可用数组来实现顺序栈。
因为栈底位置是固定不变的,所以可以将栈底位置设置在数组的两端的任何一个端点;栈顶位置是随着进栈和退栈操作而变化的,一般需用一个整型变量top。;顺序栈的操作实例如上图所示;栈的顺序存储结构及操作实现
public class SeqStackT implements StackT //顺序栈类,实现栈接口
{
Object element[]; //存储栈数据元素的数组
int top; //栈顶元素下标
}
注意:element数组存储栈的数据元素;top表示当前栈顶元素的下标。;基于数组的顺序栈(经典实现);栈的运算主要考虑栈的入栈和出栈算法:
其原因是在栈的基本运算中有六种:判断栈空、栈初始化、判断栈满(仅限于顺序存储的情况下),入栈元素、出栈元素、取栈顶元素等
而入栈时需要考虑的操作步骤是:
栈初始化,然后判断栈是否为满,如果不满,则可以插入元素(入栈)
出栈时,需要考虑的步骤是:
判断栈是否为空,如果不空,删除元素(出栈),出栈之前,保存栈顶元素。
也就是说,栈的入出栈运算包含了其他的六种基本运算,取栈顶元素的运算,只是不用修改栈顶的指针而已。 ;(1)栈的初始化
public SeqStack(int size) //构造容量为size的空栈
{
this.element = new Object[Math.abs(size)];
this.top=-1;
}
public SeqStack() //构造默认容量的空栈
{
this(64);
};(2)判读栈是否为空
public boolean isEmpty() //判断栈是否空,若空返回true
{
return this.top==-1;
} ;判读栈是否为满???
本实现采用与顺序表同样的处理:当容量不够时,则将数组容量扩充一倍。;(3)入栈
空元素不能入栈
栈的容量不够时,数组容量倍增
栈顶元素top加1,将element放入top位置,作为新的栈顶元素
public void push(T x) //元素x入栈,空对象不能入栈
{
if (x==null)
return; //空对象不能入栈
if (this.top==element.length-1)
您可能关注的文档
最近下载
- 江苏开放大学公文写作与处理050008过程性考核作业三.docx VIP
- 运维规范试题.docx VIP
- 《先进纺织技术》课件.ppt VIP
- 2025秋数学人教二年级(上) 身体上的尺子:第1课时 身体上的长度.pptx VIP
- 保定动力19秋网络运维班知识测试_A.docx VIP
- 高速铁路概论单元四第节高速铁路通信课件.pptx VIP
- HFC网络(光机及以下)调试运维培训试题.docx VIP
- 化学-海南省天一大联考2023-2024学年高三学业水平诊断(二)带答案.docx VIP
- 高考数学培优---椭圆、双曲线的焦点弦被焦点分成定比.docx VIP
- 福建省电子技术基础应试指南测试卷答案.docx VIP
原创力文档


文档评论(0)