- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
北邮数据结构实验(实现一个链栈)
附录1:实验报告模板
数 据 结 构
实
验
报
告
实验名称:实现一个链栈
学生姓名:hello
班 级:******
班内序号:*****
学 号:******
日 期:*******
实验目的和内容
(1)实验目的:
??进一步掌握指针、模板类、异常处理的使用
??掌握栈的操作的实现方法
??学习使用栈解决实际问题的能力
(2)实验内容:
根据栈的抽象数据类型的定义,按要求实现一个栈的基本功能。
要求:
a.实现一个链栈
b.编写测试main()函数测试栈或队列的正确性。
2. 程序分析
2.1 存储结构:
链栈的存储结构是:
2.2 程序流程 :
栈(链栈)的基本功能:
(1)用逐个元素入栈的方法实现一个基本的链栈:
①在栈中建立新结点:Node T * p = new Node T;
②将a[i]写入到新结点的数据域:p-data = x;
③将新结点加入到链栈中:p -next = top;
④修改新结点的指针域:top=p;
算法的时间复杂度为O(1)。
元素入栈建立链栈的过程如下图:
(2)出栈操作
①先要判断栈是否为空:if(Empty())throw下溢;
②将栈顶将要出栈的元素赋给x:T x=top-data;
③建立新的节点指针p:struct NodeT *p=top;
④栈顶指针向后移动:top=top-next;
⑤释放p所指向的栈顶空间并返回取出的栈顶元素的值:delete p; return x;
算法的时间复杂度为O(1)。
此出栈的过程如下图
(3)获取栈顶元素:
①判断栈是否为空栈:if(!top)throw此栈为空栈;
②将栈顶的元素的值赋给x:T x=top-data;
③返回栈顶值:return x;
算法的时间复杂度为O(1)。
(4)获取栈的长度
①初始化计数器:int j=0;
②建立新的节点指针p:struct NodeT *p=top;
③判断指针P,如果不是空指针,则指针向后移动,计数器加一:
while(p)
{
p=p-next;
j++;
}
时间复杂度为O(1)。
(5)析构函数
①建立新的节点:struct NodeT *p=top;
②头结点向后移动,并释放头结点:top=top-next; delete p;
③当top指针不为空时,执行循环操作:while(top){ };
时间复杂度为O(1)。
程序过程如下图:
2.3 关键算法分析
算法1:Push(T x)
[1] 算法功能:入栈操作;
[2] 算法基本思想:将已知数列的元素依次压到栈中。
[3] 算法空间、时间复杂度分析:
算法的时间复杂度为O(1)。
[4] 代码逻辑:
struct NodeT *p=new NodeT;
p-data=x;
p-next=top;
top=p;
算法2:Pop()
[1] 算法功能:元素出栈。
[2] 算法基本思想:将栈中的元素依次输出。
[3] 算法空间、时间复杂度分析:算法的时间复杂度为O(1)。
[4] 代码逻辑:
if(Empty())throw下溢;
T x=top-data;
struct NodeT *p=top;
top=top-next;
delete p;
return x;
算法3:GetTop()
[1] 算法功能:获取栈顶元素;
[2] 算法基本思想:找出top指针所指的值;
[3] 算法空间、时间复杂度分析:算法的时间复杂度为O(1);
[4] 代码逻辑:
if(!top)throw此栈为空栈;
T x=top-data;
return x;
算法4:GetLength()
[1] 算法功能:获取栈的长度;
[2] 算法基本思想:通过判断指针是否为空,指针后移,计数器加一;
[3] 算法空间、时间复杂度分析:算法的时间复杂度为0(1);
[4] 代码逻辑:
int j=0;
struct NodeT *p=top;
while(p)
{
p=p-next;
您可能关注的文档
最近下载
- 2023年山东省青岛市市北区“未来之星”选拔活动试卷(四、五年级).pdf VIP
- 鲁科版高中化学目录.pdf VIP
- 金融英语翻译 Chapter 15 应收款项.pptx VIP
- 烟草法律知识考试真题题库(含答案).pdf VIP
- 三年级上册 劳动教案.pdf VIP
- DB12T 775-2018 防雷装置检测业务规范.docx VIP
- 专题2.6 一元二次方程应用-几何动态问题(专项训练).pdf VIP
- 觉醒年代人物小传800字.doc VIP
- [通力KONE电梯资料]CTP-07.30.S2A_安全钳.pdf VIP
- 【名校课堂】九年级数学下册 28.1 锐角三角函数 正弦(第1课时)练习 (新版)新人教版.doc VIP
文档评论(0)